2012-12-07 90 views
0

我讓我的MEF特定DLL是這樣的:目錄根文件夾有空間時找不到相對MEF路徑?

string exeFile = (new Uri(Assembly.GetEntryAssembly().CodeBase)).AbsolutePath; 

string exeDir = Path.GetDirectoryName(exeFile); 

using (DirectoryCatalog catalog = new DirectoryCatalog(Path.Combine(exeDir,"Custom"))) 
{ 
    using (CompositionContainer container = new CompositionContainer(catalog)) 
    { 

     container.ComposeParts(this); 

    } 
} 

而這個作品,如果我在發展,但如果我建,採取將生成輸出,並把它稱爲c:\test 1文件夾中,當我運行它說它找不到c:\test 1\custom目錄。

在爲EXE

我發現同樣的路徑Custom文件夾,它只是無法找到它,如果directoy有一個像test 1中有空格,但它正常工作,如果它僅僅是test1

如果我有一個空間中運行它,我得到的錯誤:

Could not find part of the path 'C:\TEST%202\CUSTOM\'.

回答

0

試試這個:

string exeFile = Assembly.GetEntryAssembly().Location; 
string exeDir = Path.GetDirectoryName(exeFile); 
string path = Path.Combine(exeDir, "Custom"); 

using (DirectoryCatalog catalog = new DirectoryCatalog(path)) 
{ 
     using (CompositionContainer container = new CompositionContainer(catalog)) 
     { 
      container.ComposeParts(this); 
     } 
} 

您應該使用Location而不是CodeBase(msdn)。

MSDN備註:

To get the absolute path to the loaded manifest-containing file, use the Assembly.Location property instead.

+0

我仍然得到同樣的錯誤。 – Xaisoft

+0

什麼會告訴你這個代碼?字符串absolutePath =(new Uri(Assembly.GetEntryAssembly()。CodeBase))。AbsolutePath; string location = Assembly.GetEntryAssembly()。Location; Console.WriteLine(「AbsolutePath:{0}」,absolutePath); Console.WriteLine(「Location:{0}」,location); – kmatyaszek

+0

對於absolutePath,我得到了'c:\ test%202 \ test.exe'和位置我得到'c:\ test 2 \ test.exe',所以基於這個,我應該使用Location嗎?有什麼不同? – Xaisoft

1

Uri.UnescapeDataString工作?

我用如下:

using (DirectoryCatalog catalog = new DirectoryCatalog(Uri.UnescapeDataString(path)))... 
相關問題