本番環境を再作成するために、次のフォルダー構造を作成しました。
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;
}
);
}