要重新創建我的生產環境我創建以下文件夾結構組件:無法加載管理位於同一文件夾
C:\ TEST \ tested.dll C:測試\ TEST \ \ tools.dll因爲我知道,程序應該尋找它的子文件夾工具文件
<?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使用以下App.config文件編譯。當我嘗試啓動電臺時,仍然收到文件未找到的錯誤。
爲了讓這裏的一些方面是一個例子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
{
}
}
的崩潰的代碼是我testcode認爲是這樣的:
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;
}
);
}
融合日誌查看器說什麼? Fuslogvw.exe – CodingBarfield
我沒有在我的機器上。它應該在「C:\ Program Files \ Microsoft SDK \ Windows \ v7.0A \ bin」中,但不是。我正在使用VS2010 Express - 也許這就是爲什麼fuslogvw丟失的問題。我會嘗試以某種方式得到它。 – Johannes
只需安裝.Net SDK或將其從Visual Studio安裝中複製粘貼即可。 – CodingBarfield