WinForm和ASP.NET应用程序的相对路径

时间:2011-03-07 17:29:51

标签: c# asp.net winforms

我正在编写一个包含两个项目的应用程序。一个项目是客户端应用程序,它是一个ASP.NET Web应用程序,另一个是在WinForms上运行的管理应用程序(C#3.5)。两个项目都引用包含XML文件的类。问题是,如果没有将XML文件的目录硬编码到该类中,我很难看到如何指向它的运行目录。

Web应用程序在c:\ windows \ system32(asp dll的目录)中查找,winforms应用程序在项目的〜\ bin \ debug目录中查找。

我如何形成XML文件的相对路径,因为它根据引用它的应用程序而有所不同?

3 个答案:

答案 0 :(得分:1)

如果您修改引用XML文件的类以接收一个告诉它XML文件所在位置的参数,那么您可以让每个应用程序在其自己的位置作为参数传递给该类。

假设您的类名为YourClass,其加载XML函数称为LoadXML。

对于网络应用,您可以使用:

YourClass.LoadXML(System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath);

对于WinForms应用程序,您将使用:

YourClass.LoadXML(System.Windows.Forms.Application.StartupPath);

在YourClass中,您将使用该参数作为绝对路径,并使用System.IO.Path.Combine附加相对路径。

答案 1 :(得分:0)

我知道在使用WinForms时,您可以使用System.IO.Path.GetFullPath(string)从相对路径返回绝对路径。

我对网络并不是很熟悉,但也许这有用吗? http://blog.dotnetclr.com/archive/2009/06/08/506.aspx

希望这有帮助。

答案 2 :(得分:0)

您可以将xml文件添加到其中一个项目,其中构建操作设置为content,并且具有一个脚本,该脚本将xml文件从一个项目(如果更新)复制到另一个项目,并将构建操作设置为content。您可以使用生成后事件使用批处理文件(copyifnewer.bat)复制xml文件:

@echo off
echo Comparing two files: %1 with %2

if not exist %1 goto File1NotFound
if not exist %2 goto File2NotFound

fc %1 %2 
if %ERRORLEVEL%==0 GOTO NoCopy

echo Files are not the same.  Copying %1 over %2
copy %1 %2 /y & goto END

:NoCopy
echo Files are the same.  Did nothing
goto END

:File1NotFound
echo %1 not found.
goto END

:File2NotFound
copy %1 %2 /y
goto END

:END
echo Done.

winforms项目中的post build事件将是:

call "$(ProjectDir)copyifnewer.bat" "$(ProjectDir)\XML\myfile.xml"
"$(ProjectDir)..\WebApp\XML\myfile.xml"

这样,您只需要在winforms项目中编辑一个xml文件,另一个自动更新。然后可以使用dacris提供的路径访问XML文件,并结合相关文件夹XML。

或者,如果Web应用程序与客户端winforms应用程序在同一台计算机上运行,​​请使用公共数据文件夹:

Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData)