相关疑难解决方法(0)

程序集引用的"特定版本"属性在Visual Studio中的工作原理是什么?

今天,我仔细研究了Visual Studio 2010中程序集引用的"特定版本"属性.经过一些意外结果的实验​​后,我开始尽可能多地了解该属性的工作原理.即便如此,在我看来,并没有得到所有的答案,所以这是我尝试自我回答这个问题:

如何准确地做在Visual Studio程序集引用作品的"特定版本"属性?

.net visual-studio

143
推荐指数
2
解决办法
7万
查看次数

.Net采摘错误引用的汇编版本

我刚刚将一个现有的项目复制到一台全新的机器上,开始对它进行开发,并且遇到了我引用的程序集之一的版本问题(发生了一个telerik DLL).

该项目最初引用了旧版本的程序集(我们称之为v1.0.0.0).我的新机器安装了最新版本的程序集,所以我想我已经更新了它(让我们调用新版本的v2.0.0.0).

现在问题是:如果我将旧的v1.0.0.0 dll复制到项目文件夹并将其添加为参考,则网站启动时没有问题.如果我删除该引用(并且还从我的系统中删除旧DLL)并添加新版本(v2.0.0.0),该页面将显示以下异常:

无法加载文件或程序集"XXXXXX,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = 121fae78165ba3d4"或其中一个依赖项.定位的程序集的清单定义与程序集引用不匹配.(HRESULT异常:0x80131040)

显然,代码正在寻找过时的版本而无法找到它.但为什么?

我为该版本号编制了解决方案文件夹,但找不到一个引用.我仔细检查.csproj文件的文本,发现版本正确显示最新版本,HintPath正确显示新DLL的路径.此外,因为我没有在系统上安装旧的DLL,它不会出现在我的GAC中(尽管v2.0.0.0正如预期的那样).

然后,我启用了融合日志查看器,试图找出它为什么要查找旧版本,但没有运气:

Assembly Load Trace: The following information can be helpful to determine why the assembly 'XXXXXX, Version=1.0.0.0, Culture=neutral, PublicKeyToken=121fae78165ba3d4' could not be loaded.


=== Pre-bind state information ===
LOG: User = MyComp\me
LOG: DisplayName = XXXXXX, Version=1.0.0.0, Culture=neutral, PublicKeyToken=121fae78165ba3d4
 (Fully-specified)
LOG: Appbase = file:///d:/My Documents/Visual Studio 2010/Projects/CoolProj/WebApp/
LOG: Initial PrivatePath = d:\My Documents\Visual Studio 2010\Projects\CoolProj\WebApp\bin
Calling assembly : WebApp, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.
===
LOG: This bind …
Run Code Online (Sandbox Code Playgroud)

asp.net dll

136
推荐指数
5
解决办法
18万
查看次数

无法加载文件或程序集'WebMatrix.Data`

我将MVC4更新为MVC5.当您运行该应用程序时,我收到了一个我没有的错误WebMatrix.Data.我安装了它PM> Install-Package WebMatrix.Data.现在,当您开始进入浏览器时:

无法加载文件或程序集'WebMatrix.Data,Version = 3.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'或其依赖项之一.位于程序集的清单定义与程序集引用不匹配.(HRESULT异常:0x80131040)

有人知道怎么修这个东西吗?

包管理器控制台日志

Attempting to resolve dependency 'Microsoft.AspNet.WebPages.Data (? 2.0.20710.0)'.
Installing 'WebMatrix.Data 2.0.30506.0'.
You are downloading WebMatrix.Data from Microsoft, the license agreement to which is available at http://www.microsoft.com/web/webpi/eula/aspnetcomponent_rtw_enu.htm. Check the package for additional dependencies, which may come with their own license agreement(s). Your use of the package and dependencies constitutes your acceptance of their license agreements. If you do not accept the license agreement(s), then delete the …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc web-config asp.net-mvc-4 asp.net-mvc-5

36
推荐指数
4
解决办法
5万
查看次数

无法加载文件或程序集'Newtonsoft.Json,Version = 9.0.0.0,Culture = neutral,PublicKeyToken = 30ad4fe6b2a6aeed'或其依赖项之一

我有一个以前在Windows 8.1上使用VS 2013构建的WinJS项目.

最近我通过创建一个空白的Javascript Universal windows 10项目将该项目升级到Universal Windows 10,然后从旧项目添加了我的所有文件.

我有Windows运行时组件以及SQLite的类库.

我添加了通用Windows运行时组件和通用类库,并将我的所有文件从旧项目复制到各自的位置.

不知何故,我设法删除所有构建错误.

我安装了所有必需的SQLite-net,SQLite for Universal Windows Platform,Newtonsoft等.

但是当我运行应用程序并在Windows运行时组件中调用Native方法时,它会产生一些奇怪的错误:

An exception of type 'System.IO.FileNotFoundException' occurred in mscorlib.ni.dll but was not handled in user code.

Additional information: Could not load file or assembly 'Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' or one of its dependencies. The system cannot find the file specified.

在此输入图像描述

Newtonsoft版本是:9.0.1

我的Windows运行时组件的project.json文件如下:

  {
  "dependencies": {
    "Microsoft.NETCore.UniversalWindowsPlatform": "5.0.0",
    "Newtonsoft.Json": "9.0.1"
  },
  "frameworks": {
    "uap10.0": {}
  },
  "runtimes": {
    "win10-arm": {},
    "win10-arm-aot": {}, …
Run Code Online (Sandbox Code Playgroud)

c# visual-studio win-universal-app windows-10 windows-10-universal

27
推荐指数
7
解决办法
10万
查看次数

C#类向后兼容性规则/避免中断更改

我正在研究C#3.5程序集,它被企业服务器环境中的许多不同应用程序使用.我想在现有的C#类(不是抽象)中添加一些属性,并保持与当前客户端的向后兼容性,而无需重新编译.这是一个强烈命名的3.5组装.现有的客户端应用程序不会被重新编译.相反,我们使用发布者策略程序集将现有客户端重定向到更新版本.

维护这种类向后兼容性的规则是什么?

我正在寻找一些规则,我可以验证我的代码更改.

在我当前尝试更新类客户端之后抛出"找到的程序集的清单定义与程序集引用不匹配"异常.

.net c# backwards-compatibility

23
推荐指数
1
解决办法
6336
查看次数

"找到的程序集的清单定义与程序集引用不匹配"

我已经将.NET WebAPI应用程序(针对.NET 4.5.2编译并在本地运行)部署到Azure应用服务中.

抛出的错误是

无法加载文件或程序集'System.Web.Mvc,Version = 4.0.40804.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'或其依赖项之一.定位的程序集的清单定义与程序集引用不匹配.

我已检查App服务bin目录中的System.Web.Mvc.dll 大小为505504字节 - 与我的本地System.Web.Mvc.dll大小相同,版本为4.0.40804.0,更改了2014-09 -25,在本地工作没有问题.我能说的唯一区别是我在本地安装了.NET 4.5.2,而不是像Azure那样安装4.6.1.

我的Web.config中的条目是

  <dependentAssembly>
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="1.0.0.0-5.0.0.0" newVersion="4.0.40804.0" />
  </dependentAssembly>
Run Code Online (Sandbox Code Playgroud)

但我已经尝试过了

  <dependentAssembly>
    <assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
    <bindingRedirect oldVersion="1.0.0.0-5.0.0.0" newVersion="4.0.0.0" />
  </dependentAssembly>
Run Code Online (Sandbox Code Playgroud)

这也不起作用.

如何为我的应用程序编辑该条目以查找System.Web.Mvc.dll?

作为参考,完整的错误消息是:

'/'应用程序中的服务器错误.

无法加载文件或程序集"System.Web.Mvc"或其依赖项之一.定位的程序集的清单定义与程序集引用不匹配.(HRESULT异常:0x80131040)

描述:执行当前Web请求期间发生未处理的异常.请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息.

异常详细信息:System.IO.FileLoadException:无法加载文件或程序集"System.Web.Mvc"或其依赖项之一.定位的程序集的清单定义与程序集引用不匹配.(HRESULT异常:0x80131040)

来源错误:

在执行当前Web请求期间生成了未处理的异常.可以使用下面的异常堆栈跟踪来识别有关异常的起源和位置的信息.

程序集加载跟踪:以下信息有助于确定无法加载程序集"System.Web.Mvc"的原因.

警告:装配绑定日志记录已关闭.要启用程序集绑定失败日志记录,请将注册表值[HKLM\Software\Microsoft\Fusion!EnableLog](DWORD)设置为1.注意:程序集绑定失败日志记录会导致一些性能损失.要关闭此功能,请删除注册表值[HKLM\Software\Microsoft\Fusion!EnableLog].

堆栈跟踪:

[FileLoadException:无法加载文件或程序集'System.Web.Mvc'或其依赖项之一.定位的程序集的清单定义与程序集引用不匹配.(HRESULT异常:0x80131040)]

[FileLoadException:无法加载文件或程序集'System.Web.Mvc,Version = 4.0.40804.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'或其依赖项之一.定位的程序集的清单定义与程序集引用不匹配.(来自HRESULT的异常:0x80131040)] System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName,String codeBase,Evidence assemblySecurity,RuntimeAssembly locationHint,StackCrawlMark&stackMark,IntPtr pPrivHostBinder,Boolean throwOnFileNotFound,Boolean forIntrospection,Boolean suppressSecurityChecks)+0 System.Reflection.RuntimeAssembly .nLoad(AssemblyName fileName,String codeBase,Evidence assemblySecurity,StackCrawlMark&stackMark,IntPtr pPrivHostBinder,Boolean throwOnFileNotFound,Boolean forIntrospection,Boolean suppressSecurityChecks)+36 System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName …

c# asp.net asp.net-mvc azure .net-assembly

23
推荐指数
1
解决办法
6万
查看次数

更新生产ASP.NET网站bin文件夹中的DLL

我想更新生产Web应用程序中的类库(单个DLL文件).此Web应用程序已预编译(已发布).我在StackOverflow上读了一个答案(抱歉,似乎无法找到它,因为搜索功能不能很好地工作),这让我相信我可以将新的DLL粘贴到bin文件夹中并且它会被选中没有问题(这会导致WP回收,这对我来说很好,因为我们不使用InProc会话状态).

但是,当我尝试这个时,我的网站爆炸并提供一个FileLoadException,说明程序集清单定义与程序集引用不匹配.这个世界到底是什么?!在Visual Studio中更新DLL并重新部署整个站点工作得很好,但后面是一个巨大的痛苦.如果必须重新部署整个站点以实现任何更改,那么拥有单独的DLL有什么意义呢?

这是一个问题:如何在不破坏应用程序且不重新部署所有文件的情况下更新生产网站上的DLL?

asp.net deployment assemblies reference fileloadexception

12
推荐指数
1
解决办法
2万
查看次数

C#:无法从程序集加载类型

在将Lucene.net和Lucene.net Contrib添加到C#MVC3后,我在第一次成功运行后收到以下消息.收到此错误后,我需要完全擦除C:\ Users\Me\AppData\Local\Temp\Temporary ASP.NET Files,然后才能再次运行该项目.

我已经尝试手动删除Lucene文件(包括我的项目中的引用),并重新安装它们 - 使用NuGet和手动 - 但它总是相同的情况; 项目运行一次后,我开始收到以下错误:

注意:Contrib.Regex是Lucene.net Contrib的一部分.

Server Error in '/' Application.

Could not load types from assembly Contrib.Regex, Version=2.9.4.0, Culture=neutral, PublicKeyToken=85089178b9ac3181, errors:
Exception: System.IO.FileLoadException: Could not load file or assembly 'Lucene.Net, Version=2.9.4.1, Culture=neutral, PublicKeyToken=85089178b9ac3181' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)
File name: 'Lucene.Net, Version=2.9.4.1, Culture=neutral, PublicKeyToken=85089178b9ac3181'

=== Pre-bind state information ===
LOG: User = rcw7\Me
LOG: DisplayName = Lucene.Net, …
Run Code Online (Sandbox Code Playgroud)

c# windows dll lucene.net visual-studio

12
推荐指数
1
解决办法
2万
查看次数

流行的开源库和引用冲突

我们在所有(许多)内部应用程序中使用log4net.我们通常会执行相当于xcopy部署的操作.为方便开发人员,我们将log4net源编译为一个核心库.

现在又回来咬我们了.其他开源库(如Topshelf)引用log4net.还有一些(例如NServiceBus)将log4net合并到它们的程序集中.通常版本不同.

这是一个普遍的问题; 特定的库只是例子.

有几个类似的问题:

在各种解决方案(GAC,assemblyBinding,bindingRedirect等)中,未来可能会给我们带来最小的痛苦?我们可以修改我们的核心库; 我们无法做任何会破坏现场部署版本的事情.更新我们所有的项目参考将是痛苦的,所以我们只想这样做一次.

更新: Topshelf的当前版本抽象了日志记录,因此这不再是该框架的问题.

c# dll gac reference

9
推荐指数
1
解决办法
645
查看次数

无法加载文件或程序集Newtonsoft.json.dll

"无法加载文件或程序集'Newtonsoft.Json,版本= 4.0.3.0,文化=中性公钥= 30ad4fe6b2a6aeed’或它的一个依赖.定位的程序集的清单定义与程序集引用不匹配.(HRESULT异常:0x80131040)".

发布到twitter时需要"NewtonsoftJson.dll"程序集.使用的版本是4.0.3.0.

并且相同的程序集(但是diff版本4.0.0.0)被用作facebook C#api(dll)的依赖程序集.但是,上述程序集(4.0.3.0)对两种情况都不起作用(即发布到twitter和登录facebook).为了解决这个问题,在一个单独的项目张贴到Twitter和分别引用组件(4.0.3.0)(在项目为Twitter发布).而另一个版本(4.0.0.0)的溶液中加入作为在Facebook主项目引用但仍然是错误来了.如果Twitter项目被禁用并运行,那么Facebook登录工作正常和副vera.

我做了很多研究并尝试了以下方法.

删除临时asp.net文件清理解决方案重启计算机

甚至试图从gac卸载程序集(但它没有在那里注册).

请帮助我,因为它无法正常工作.谢谢,S

.net c# asp.net-mvc winforms

9
推荐指数
2
解决办法
3万
查看次数