首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >FileLoadException At InitializeComponent或x:Class=

FileLoadException At InitializeComponent或x:Class=
EN

Stack Overflow用户
提问于 2015-03-31 13:27:41
回答 2查看 531关注 0票数 13

我在InitializeComponent-method上得到一个文件加载程序异常(第一次机会),或者调试器在多个WPF用户控件的xaml-根的x:Class属性处中断。尽管异常大大降低了导航速度,但一切都很好。

这是异常消息:

无法加载文件或程序集“Company.Solution.UserInterface、Version=0.1.5568.25577、Culture=neutral、PublicKeyToken=45069ab0c15881ce”或其依赖项之一。所定位的程序集的清单定义与程序集引用不匹配。(HRESULT例外: 0x80131040)

这是融合日志:

代码语言:javascript
复制
Assembly manager loaded from:  C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll
Running under executable  D:\Development\Product\Main\src\Company.Product \bin\Debug\Product.vshost.exe
--- A detailed error log follows. 

=== Pre-bind state information ===
LOG: DisplayName = Company.Product .UserInterface, Version=0.1.5568.25577, Culture=neutral, PublicKeyToken=45069ab0c15881ce
(Fully-specified)
LOG: Appbase = file:///D:/Development/Product/Main/src/Company.Product/bin/Debug/
LOG: Initial PrivatePath = NULL
Calling assembly : PresentationFramework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35.     
LOG: This bind starts in default load context.
LOG: Using application configuration file: D:\Development\Product \Main\src\Company.Product \bin\Debug\Product .vshost.exe.Config
LOG: Using host configuration file: 
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config.
LOG: Post-policy reference: Company.Product .UserInterface, Version=0.1.5568.25577, Culture=neutral, PublicKeyToken=45069ab0c15881ce
LOG: Attempting download of new URL file:///D:/Development/Product/Main/src/Company.Product/bin/Debug/Company.Product.UserInterface.DLL.
WRN: Comparing the assembly name resulted in the mismatch: Revision Number
ERR: Failed to complete setup of assembly (hr = 0x80131040). Probing terminated.

我的项目结构有一个根项目,它引用一个模块项目(其中发生异常)。模块项目本身引用了上述探测"Company.Product.UserInterface.dll“的目标项目,该项目包含一些资源/控件/样式/原语/转换器等。

怎样才能摆脱FileLoadExceptions

另一个更完整的信息融合日志:

代码语言:javascript
复制
=== Pre-bind state information ===
LOG: DisplayName = Company.Product.UserInterface, Version=0.1.5577.18122,      Culture=neutral, PublicKeyToken=45069ab0c15881ce
(Fully-specified)
LOG: Appbase = file:///D:/Development/Product/Main/src/Company.Product/bin/Debug/
LOG: Initial PrivatePath = NULL
LOG: Dynamic Base = NULL
LOG: Cache Base = NULL
LOG: AppName = Product.vshost.exe
Calling assembly : PresentationFramework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35.
LOG: This bind starts in default load context.
LOG: Using application configuration file: D:\Development\Product\Main\src\Company.Product\bin\Debug\Product.vshost.exe.Config
LOG: Using host configuration file: 
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config.
LOG: Post-policy reference: Company.Product.UserInterface, Version=0.1.5577.18122, Culture=neutral, PublicKeyToken=45069ab0c15881ce
LOG: GAC Lookup was unsuccessful.
LOG: Attempting download of new URL file:///D:/Development/Product/Main/src/Company.Product/bin/Debug/Company.Product.UserInterface.DLL.
LOG: Assembly download was successful. Attempting setup of file: D:\Development\Product\Main\src\Company.Product\bin\Debug\Company.Product.UserInterface.dll
LOG: Entering run-from-source setup phase.
LOG: Assembly Name is: Company.Product.UserInterface, Version=0.1.5577.18123, Culture=neutral, PublicKeyToken=45069ab0c15881ce
WRN: Comparing the assembly name resulted in the mismatch: Revision Number
ERR: The assembly reference did not match the assembly definition found.
ERR: Run-from-source setup phase failed with hr = 0x80131040.
ERR: Failed to complete setup of assembly (hr = 0x80131040). Probing terminated.

当前出现异常时,引用的SolutionExplorer中程序集的版本为0.1.5577.18123 (在所有引用..UserInterface.dll的解决方案中)。我不知道是谁查的0.1.5577.18122,这个版本根本就不存在)

如果我运行一个新的重新构建--我得到的都是相同的错误--融合查找(我从来没有这个版本号):

代码语言:javascript
复制
LOG: Post-policy reference: Company.Product.UserInterface, Version=0.1.5577.18465, Culture=neutral, PublicKeyToken=45069ab0c15881ce

发现的版本如下:

代码语言:javascript
复制
LOG: Assembly Name is: Company.Product.UserInterface, Version=0.1.5577.18466, Culture=neutral, PublicKeyToken=45069ab0c15881ce

Visual版本为2013年“终极版”,该项目构建在.net4.5上,程序集版本在构建过程中自动生成。我上传了构建日志上传,因为它太大了。完整的融合日志可以找到在巴斯泰宾

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-04-09 09:30:18

代码语言:javascript
复制
   Version=0.1.5577.18122

这个自动生成的版本号讲述了一个故事,版本号的最后两个部分都不是任意的.它们基于构建程序集的日期和时间。由2000年1月1日起的天数生成该版本号。修正号是从午夜开始的秒数*2,没有夏令修正。

因此,我们所知道的事实是,18122集会是在3月30日下午2:12:34建成的。然后它又建成了,2秒后,下午2:12:36。之后,它被用作一个参考程序集来构建另一个项目,这使CLR吐出了子弹。

如果发生而不是,则必须在单个构建会话中只构建一次项目。要找出发生这种情况的原因,需要在MSBuild跟踪中进行挖掘。使用工具+选项、项目和解决方案,生成并运行所需的工具。将"MSBuild项目生成输出详细“设置更改为详细信息。MSBuild现在变得非常健谈,并告诉您为什么它决定构建一个项目。如果你在森林中迷路了,试图解码它的输出(有很多),那么把它复制/粘贴到一个粘贴箱中,并在你的问题中链接到它。

否则就没有那么多伟大的解释来解释像这样的不幸。较早的版本使得不小心在项目之间创建循环依赖变得太容易了。通过使用Build +Clean将其清除掉。重新构建解决方案现在失败,并告诉您哪个引用程序集是麻烦制造者。但是,您使用的是.NET 4,所以至少要使用VS2010。因此,并不是一个了不起的领先,微软增加了更多的检查,以防止这种情况发生而没有警告。不确定它是否在所有情况下都是可靠的,例如,如果您不依赖于MSBuild,那么它可能会被愚弄。在具有“持续集成”功能的构建服务器上,这并不少见。

我们需要建立跟踪给你一个可靠的诊断。

票数 7
EN

Stack Overflow用户

发布于 2015-04-09 07:51:15

建议1

是否有循环引用导致加载dll的旧版本?(事实证明,这不是问题所在,但出于历史原因,我留任了)。与这个答案有关

建议2

您能尝试创建发布者策略吗?下面是一个需要添加到app.config文件中的示例。

代码语言:javascript
复制
<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
    <dependentAssembly>
      <assemblyIdentity name="Company.Solution.UserInterface"
                        publicKeyToken="45069ab0c15881ce"
                        culture="en-us" />
      <!-- Redirecting to version 0.1.5568.25577 of the assembly. -->
      <bindingRedirect oldVersion="0.0.0.0-0.1.5568.25577"
                      newVersion="0.1.5568.25577"/>
    </dependentAssembly>
  </assemblyBinding>
</runtime>

在此进一步详细解释

建议3

是否对用于对程序集进行签名的密钥有任何更改?

建议4

作为对我最初建议的一点修改。您已经说过有3个项目引用了Company.Solution.UserInterface。能否确认所有3个项目都引用了该程序集的相同版本?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29369879

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档