2010-03-13 39 views
5

在VSTO Excel加載項的代碼:開放XML文件位於插件文件夾

Dim XMLDoc As XElement = XElement.Load("XMLFile1.xml") 

生成FileNotFound誤差與所述消息(」 找不到文件「C:\用戶\道格\文件\ XMLFile1 .xml'。「)它正在My Documents文件夾中查找,但XML文件位於該項目的VS Projects文件夾中。 我已將XML文件的「複製到輸出目錄」屬性設置爲「始終複製」。當我更改代碼以包含代碼工作的XML文件的完整路徑時。

另外,如果我包括在Windows控制檯上面的代碼或其他類型的項目,其正常運行。我只是在Excel地址中找到它。 以上情況適用於VSTO 2008/Excel 2003和VSTO 2010/Excel 2010.

回答

13

當您使用相對路徑時,將使用當前目錄(Environment.CurrentDirectory)來解析該路徑。在VSTO插件的情況下,它會自動設置爲用戶文檔文件夾。但是,對於控制檯應用程序,其值與可執行文件設置爲相同的文件夾,這就是您遇到不同行爲的原因。

如果您的文件將被部署到與VSTO附加組件相同的文件夾中,您可以使用(AppDomain.CurrentDomain.BaseDirectory)構建文件的完整路徑。

例如,在C#:

string filename = "XMLFile1.xml"; 

string path = Path.Combine(
    AppDomain.CurrentDomain.BaseDirectory, 
    filename); 

XElement.Load(path); 
+0

若昂,非常感謝。這樣可行。 – 2010-03-28 03:35:22

+1

@João,這太棒了。不知道你是如何找到這顆寶石的,因爲我一整天都在冷冰冰,找不到這個VSTO問題的答案。你的答案是現貨!非常感謝! – 2012-08-29 00:43:27

+0

我用「Environment.CurrentDirectory」來獲取工作目錄的所有VSTO解決方案,直到昨天一直工作,我首先將它作爲VS錯誤,因爲它是相對環境變量。我試圖以許多方式改變VS工作目錄...沒有成功。非常感謝@João – 2017-08-16 07:31:40

1

您還可以使用:

Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase) 
相關問題