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\'.

4

2 回答 2

1

Uri.UnescapeDataString工作了吗?

我使用如下:

using (DirectoryCatalog catalog = new DirectoryCatalog(Uri.UnescapeDataString(path)))...
于 2012-12-07T21:18:03.840 回答
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 属性。

于 2012-12-07T18:44:58.727 回答