2

本番環境を再作成するために、次のフォルダー構造を作成しました。

c:\TEST\tested.dll c:\TEST\tested\tools.dll

testing.dll は、次の App.config ファイルを使用してコンパイルされます。

  <?xml version="1.0" encoding="utf-8" ?>
  <configuration>
    <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <probing privatePath="tested"/>
      </assemblyBinding>
    </runtime>
  </configuration>

私の知る限り、アプリケーションはサブフォルダー内のツール ファイルを探す必要があります。ステーションを起動しようとすると、まだファイルが見つからないというエラーが表示されます。

ここでいくつかのコンテキストを提供するために、tested.dll ソースの例を示します。

    namespace ConsoleApplication1
    {
        public static class Testable
        {
            public static tools.IToolAble usefultool = null;

            public static void initialisation()
            {
                if (usefultool == null) usefultool = new UsefulTest()
            }
        }

        public class UsefulTest : tools.IToolAble
        {
        }
    }

および tools.dll ソースの例:

    namespace tools
    {
        public interface IToolAble
        {
        }
    }

クラッシュするコードは、次のように機能する私のテストコードです。

    private CustomMock controller = new CustomMock();
    public void TestFixtureSetUp()
    {
        controller.LoadFrom(@"c:\TEST\tested.dll");

        //The next line crashes because tools assembly is needet but not found
        controller.InvokeInitialisation();
    }

私は何が欠けていますか?App.config は正しいですか?


編集:

以下の答えは正しいです。パスは、正しい dll を選択できるようになって初めてわかります。new ResolveEventHandlerしたがって、他のチームはロードする前に を追加する必要があります。これを簡略化したものを次に示します。

    internal void AddResolveEventHandler(string assemblyname, string assemblylocation)
    {
        AppDomain.CurrentDomain.AssemblyResolve +=
        new ResolveEventHandler(
            (sender, args) =>
            {
                Assembly ret = null;
                if (
                    new AssemblyName(args.Name).Name == assemblyname && 
                    File.Exists(assemblylocation))
                {
                    ret = Assembly.LoadFrom(assemblylocation);
                }
                return ret;
            }
        );
    }
4

1 に答える 1

0

testing.dll は、次の App.config ファイルを使用してコンパイルされます

DLL の .config ファイルではなく、yourapp.exe.config ファイルである必要があります。CLR は、メイン プロセスに関連付けられた .config ファイルのみを検索します。

また、ホスティング プロセスを有効にしてデバッグするときに必要な app.vshost.exe.config に注意してください。

単体テスト ランナー、別の .exe ファイルを使用する場合は注意してください。

これが実際に苦労する価値があるかどうかを検討してください。ユーザーは DLL の場所を気にしません。

于 2012-05-24T17:17:43.000 に答える