WinForm和ASP.NET应用程序的相对路径
我正在编写一个包含两个项目的应用程序。一个项目是客户端应用程序,它是一个ASP.NET Web应用程序,另一个是在WinForms(C#3.5)上运行的管理应用程序。两个项目都引用一个包含XML文件的类。问题在于,在将XML文件的目录硬编码到该类中之后,我很难看到如何指向它的运行目录。WinForm和ASP.NET应用程序的相对路径
Web应用程序在c:\ windows \ system32(asp dll的目录)中查找,winforms应用程序在项目的〜\ bin \ debug目录中查找。
如何构建XML文件的相对路径,因为它根据哪个应用引用它而不同?
如果修改类引用XML文件采取的参数告诉它XML文件所在的位置,然后你可以让每个应用程序作为参数在它自己的位置传递给该类。
假设你的类被称为YourClass,并且它的加载XML函数被称为LoadXML。
对于Web应用程序,你可以使用:
YourClass.LoadXML(System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath);
对于WinForms应用程序,你可以使用:
YourClass.LoadXML(System.Windows.Forms.Application.StartupPath);
里面YourClass,你可以使用该参数为绝对路径,使用System.IO.Path.Combine附加一个相对路径。
我知道在使用WinForms时,可以使用System.IO.Path.GetFullPath(string)从相对路径返回绝对路径。
我对网络并不是很熟悉,但这可能有帮助吗? http://blog.dotnetclr.com/archive/2009/06/08/506.aspx
希望这会有所帮助。
您可以将xml文件添加到其中一个构建操作设置为内容的项目中,并有一个脚本将xml文件从一个项目(如果更新)复制到另一个项目,并将构建操作设置为内容。您可以使用生成后事件使用批处理文件(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项目将是:
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)