我正在使用这样的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\'.
答案 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属性。