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

気がついたのですが、ディレクトリに のようなスペースがある場合にのみ見つけることができますがtest 1test1

スペースを入れて実行すると、次のエラーが発生します。

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);
       }
 }

CodeBase ( msdn ) の代わりに Location を使用する必要があります。

MSDN の備考:

読み込まれたマニフェストを含むファイルへの絶対パスを取得するには、代わりに Assembly.Location プロパティを使用します。

于 2012-12-07T18:44:58.727 に答える