2011-03-07 54 views
0

我正在編寫一個包含兩個項目的應用程序。一個項目是客戶端應用程序,它是一個ASP.NET Web應用程序,另一個是在WinForms(C#3.5)上運行的管理應用程序。兩個項目都引用一個包含XML文件的類。問題在於,在將XML文件的目錄硬編碼到該類中之後,我很難看到如何指向它的運行目錄。WinForm和ASP.NET應用程序的相對路徑

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

如何構建XML文件的相對路徑,因爲它根據哪個應用引用它而不同?

回答

1

如果修改類引用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附加一個相對路徑。

0

您可以將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)