目录根文件夹有空间时找不到相对MEF路径?

时间:2012-12-07 18:24:18

标签: c# .net-4.0

我正在使用这样的MEF特定dll:

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运行应用程序时,它会说它可以找不到c:\test 1\custom目录。

Custom

位于同一路径中的EXE文件夹

我注意到,如果directoy中有test 1的空格,它就找不到它,但如果它只是test1

它确实可以正常工作

如果我用空格运行它,我会收到错误:

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

2 个答案:

答案 0 :(得分:1)

Uri.UnescapeDataString有效吗?

我使用如下:

using (DirectoryCatalog catalog = new DirectoryCatalog(Uri.UnescapeDataString(path)))...

答案 1 :(得分: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备注:

  

要获取加载的包含清单的文件的绝对路径,请使用   而不是Assembly.Location属性。