2017-06-21 52 views
0

我知道有关于这个问题的几个类似的主题(相信我,我花了最后两天阅读所有这些),但没有一个在我奇怪的情况帮助。
所以我来到这里,也许有人可以启发我可能是什么问题。无法加载文件或程序集或其依赖项之一。找到的程序集的清单定义不符合程序集参考

我们有一个C#(WPF)控件的源代码TreeListView。
它与VS2015开发的命令提示符下使用CSC.EXE编译(更大的项目的一部分,IDE不用于编译)以下参数:

/reference:"System.Xaml.dll" 
/reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\PresentationCore.dll" 
/reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\WindowsBase.dll" 
/reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\WindowsFormsIntegration.dll" 
/reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5\PresentationFramework.dll" 
/nowarn:1701,1702 /errorreport:prompt /warn:4 /platform:x86 /define:DEBUG;TRACE /debug+ /debug:full /optimize- /target:library /out:..\debug\TreeListView.dll 

...here all the .cs source files are listed... 

/resource:"..\TreeListView\obj\debug\TreeListView.g.resources" 

我们所有的C#/ WPF DLL与编译在命令行中有相同的选项。

它编译得很好,我有TreeListView.dll。它的名字并不牢固。
它旁边mainApp.exe复制,而当我经营的主要应用程序,并试图用一个窗口,这个TreeListView,我得到异常

*** Exception ***: System.IO.FileLoadException 
Message: Could not load file or assembly 'TreeListView, PublicKeyToken=ffedd4b1334b06f5' or one of its dependencies. 
The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040) 
Source: mscorlib 

的main_app还编译CSC.EXE,引用正是编译TreeListView.dll

顺便说一下上面的输出,不知道为什么它显示的公钥,当它是不强命名

sn -T debug\TreeListView.dll 

Microsoft (R) .NET Framework Strong Name Utility Version 4.0.30319.0 
Copyright (c) Microsoft Corporation. All rights reserved. 

debug\TreeListView.dll does not represent a strongly named assembly 

其他观测

在VS2015 IDE中,我创建了一个新的WPF应用程序,并引用上述编译TreeListView.dll - 和使用的XAML控制:它会立即显示在GUI XAML Designer中Could not load file or assembly 'TreeListView, PublicKeyToken=ffedd4b1334b06f5' or one of its dependencies. The system cannot find the file specified.
(注,这里的错误是The system cannot find the file specified.

enter image description here

我IDE吼声会给出更多的信息,但没有什么新来的。

其他信息: 这整个编译/运行过程中工作得很好用VS2008(.NET3.5),现在转移到VS2015(.NET4),updaexperiencing此之后,只有用这种TreeControl.dll

我检查了该DLL的所有引用,使用框架,ILSpy,ildasm,ProcessMonitor找不到文件等,但找不到任何有用的东西。

反汇编> TreeControl.dll的表现 - 这也看起来不错,以我

// Metadata version: v4.0.30319 
.assembly extern mscorlib 
{ 
    .publickeytoken = (B7 7A 5C 56 19 34 E0 89)       // .z\V.4.. 
    .ver 4:0:0:0 
} 
.assembly extern PresentationFramework 
{ 
    .publickeytoken = (31 BF 38 56 AD 36 4E 35)       // 1.8V.6N5 
    .ver 4:0:0:0 
} 
.assembly extern System.Xaml 
{ 
    .publickeytoken = (B7 7A 5C 56 19 34 E0 89)       // .z\V.4.. 
    .ver 4:0:0:0 
} 
.assembly extern WindowsBase 
{ 
    .publickeytoken = (31 BF 38 56 AD 36 4E 35)       // 1.8V.6N5 
    .ver 4:0:0:0 
} 
.assembly extern PresentationCore 
{ 
    .publickeytoken = (31 BF 38 56 AD 36 4E 35)       // 1.8V.6N5 
    .ver 4:0:0:0 
} 
.assembly extern System 
{ 
    .publickeytoken = (B7 7A 5C 56 19 34 E0 89)       // .z\V.4.. 
    .ver 4:0:0:0 
} 
.assembly extern System.Core 
{ 
    .publickeytoken = (B7 7A 5C 56 19 34 E0 89)       // .z\V.4.. 
    .ver 4:0:0:0 
} 

任何想法检查什么将非常感激。

回答

1

尝试在运行时使用Fuslogvw进行失败绑定。当您将应用程序集设置运行为“将绑定失败记录到磁盘”时。

窗口上会记录任何失败的绑定。您可以双击日志以获取有关哪个dll尝试加载TreeListView程序集的全部细节,以及它试图查找该dll的所有位置。

+0

非常感谢! 这个工具帮了我,错误是:'WRN:比较汇编名称导致不匹配:PUBLIC KEY TOKEN'我已经很奇怪,包含的异常包含:“PublicKeyToken = ffedd4b1334b06f5”,当二进制没有强名称, 往上看。 但是,二进制文本搜索显示它包含“PublicKeyToken = ffedd4b1334b06f5”。 我发现在csc.exe编译期间使用的二进制文件(TreeListView.g.resources - 这个二进制文件是由IDE生成的)包含这个键。 – Zotyi

+0

** ...继续... ** 在IDE中,加载TreeListView项目,然后取消选中“sign assembly”,然后重新生成TreeListView.g.resources。 这不包含任何公钥,用文件搜索进行检查。 然后用csc.exe重新编译TreeListView.dll(现在使用新的TreeListView.g.resources),它工作正常!简而言之,当生成TreeListView.g.resources时,它使用选项“sign assembly”,但最终的TreeListView.dll没有强命名,但仍部分以某种方式被签名,但是“不可见” - 但导致异常。 – Zotyi

相关问题