相关疑难解决方法(0)

解决MSB3247 - 发现同一依赖程序集的不同版本之间存在冲突

在使用msbuild进行编译时,.NET 3.5解决方案最终出现此警告.

有时NDepend可能有所帮助,但在这种情况下,它没有提供任何进一步的细节.像Bob一样,我最终不得不在ILDASM中打开每个程序集,直到找到引用旧版依赖程序集的程序集.

我确实尝试使用VS 2010 Beta 2中的MSBUILD(因为Connect文章表明这​​已经在下一版本的CLR中得到修复)但是它没有提供任何更多细节(可能在Beta 2后修复)

有更好的(更自动化的)方法吗?

.net msbuild clr ndepend

422
推荐指数
7
解决办法
19万
查看次数

发现无法解析的同一依赖程序集的不同版本之间的冲突

当我清理并构建包含多个项目的解决方案时,输出窗口会报告构建成功.但是,当我查看错误列表窗口时,它会显示此警告:

发现无法解析的同一依赖程序集的不同版本之间的冲突.当日志详细程度设置为详细时,这些引用冲突将在构建日志中列出.C:\ Program Files(x86)\ MSBuild\12.0\bin\Microsoft.Common.CurrentVersion.targets

当我双击此消息时,它会打开C:\ Program Files(x86)\ MSBuild\12.0\bin\Microsoft.Common.CurrentVersion.targets文件,但我不明白其中的任何内容.

我正在使用Visual Studio Express 2013进行Web.

如何找出错误以及哪个DLL以及如何使警告消失?

.net msbuild visual-studio-express visual-studio

349
推荐指数
9
解决办法
24万
查看次数

无法加载文件或程序集"Newtonsoft.Json"或其依赖项之一.清单定义与程序集引用不匹配

搜索后我尝试过的事情:

  1. 在Web.Config中对旧版本进行了绑定:

    <dependentAssembly>
        <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
        <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.1.0" />
    </dependentAssembly>
    
    Run Code Online (Sandbox Code Playgroud)
  2. 编辑我的.csproj文件以确保只有一个Newtonsoft引用

    <Reference Include="Newtonsoft.Json, Version=6.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
       <HintPath>..\packages\Newtonsoft.Json.6.0.1\lib\net45\Newtonsoft.Json.dll</HintPath>
       <SpecificVersion>False</SpecificVersion>
       <Private>True</Private>
    </Reference>
    
    Run Code Online (Sandbox Code Playgroud)
  3. 在我的计算机上搜索每个Newtonsoft.Json.dll并删除每个非6.0.1版本并删除我的临时文件夹的内容

  4. 在nuget manager控制台中修复/重新安装软件包

它成功构建,但在访问网站时出错.

编辑

好吧,所以然后我尝试重新安装像每个nuget包,它似乎已经添加了4.5版本的newtonsoft.json.dll,但我得到相同的错误.我的项目的目标freamework是.NET 4.5.1,这是我现在得到的堆栈跟踪:

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

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

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

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

来源错误:

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

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

===预绑定状态信息===日志:DisplayName = Newtonsoft.Json(部分)WRN:为程序集提供了部分绑定信息:WRN:程序集名称:Newtonsoft.Json | 域ID:2 WRN:仅提供部分程序集显示名称时发生部分绑定.警告:这可能导致装订器装入错误的装配.警告:建议为程序集提供完全指定的文本标识,即WRN:由简单名称,版本,区域性和公钥标记组成.警告:有关此问题的更多信息和常见解决方案,请参阅白皮书http://go.microsoft.com/fwlink/?LinkId=109270.日志:Appbase = file:/// c:/ users/user/documents/visual studio 2013/Projects/foo/bar/LOG:Initial PrivatePath = c:\ users\user\documents\visual studio 2013\Projects\foo\bar\bin调用程序集:(未知).===日志:此绑定在默认加载上下文中启动.日志:使用应用程序配置文件:c:\ users\user\documents\visual studio 2013\Projects\foo\bar\web.config日志:使用主机配置文件:C:\ Users\user\Documents\IISExpress\config\aspnet .config日志:使用C:\ Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config中的计算机配置文件.日志:此时策略未应用于引用(私有,自定义,部分或基于位置的程序集绑定).日志:尝试下载新的URL文件:/// C:/ Users/user/AppData/Local/Temp/1/Temporary ASP.NET Files/root/48686d37/9d7a6572/Newtonsoft.Json.DLL.日志:尝试下载新的URL文件:/// C:/ Users/user/AppData/Local/Temp/1/Temporary ASP.NET Files/root/48686d37/9d7a6572/Newtonsoft.Json/Newtonsoft.Json.DLL.日志:尝试下载新的URL文件:/// c:/ users/user/documents/visual studio 2013/Projects/foo/bar/bin/Newtonsoft.Json.DLL.日志:使用应用程序配置文件:c:\ users\user\documents\visual studio 2013\Projects\foo\bar\web.config日志:使用主机配置文件:C:\ Users\user\Documents\IISExpress\config\aspnet …

json json.net .net-assembly

203
推荐指数
9
解决办法
34万
查看次数

如何解决NuGet依赖地狱

我开发了一个带有一些功能名称的库,CompanyName.SDK它必须集成在公司项目中CompanyName.SomeSolution

CompanyName.SDK.dll必须通过NuGet包部署.并且CompanyName.SDK包依赖于第三方NuGet包.举个好例子,我们来看看吧Unity.当前的依赖是对v3.5.1405-prereleaseUnity.

CompanyName.SomeSolution.Project1取决于Unity v2.1.505.2. CompanyName.SomeSolution.Project2取决于Unity v3.0.1304.1.

集成CompanyName.SDK到此解决方案中会增加依赖性Unity v3.5.1405-prerelease.我们假设CompanyName.SomeSolution有一个可运行的输出项目CompanyName.SomeSolution.Application,它取决于上面和下面的两个CompanyName.SDK

这里出现了问题.所有Unity程序集在所有包中都具有相同的名称,没有版本说明符 在目标文件夹中,它只是一个版本的Unity程序集:v3.5.1405-prereleasevia bindingRedirectin app.config.

如何代码Project1,Project2SDK使用相关的软件包,他们进行编码,编译和测试用的确切需要的版本?

注1: Unity只是一个例子,第三方模块依赖于另一个第三方模块,实际情况要差10倍,而第三方模块又同时有3-4个版本.

注意2:我无法将所有软件包升级到最新版本,因为有些软件包具有依赖性非最新版本的其他软件包.

注3:假设依赖包在版本之间有重大变化.这是我提出这个问题的真正问题.

注4:我知道关于相同依赖程序集的不同版本之间的冲突的问题,但答案并没有解决问题的根源 - 它们只是隐藏它.

注5:地狱是否承诺"DLL Hell"问题解决方案?它只是从另一个位置重新出现.

注6:如果您认为使用GAC是某种选择,那么请逐步指导或给我一些链接.

.net c# dependency-management nuget

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

警告MSB3276 - 发现同一依赖程序集的不同版本之间存在冲突

我的解决方案包含多个项目并编译好.我正在使用nuget,我使用的其中一个软件包是log4net.2.0.0.我最近将软件包更新到log4net.2.0.3,并确保在每个属于该解决方案的项目中,引用都会更新.不幸的是,在编译过程中我仍然收到以下警告:

(ResolveAssemblyReferences目标) - > C:\ Program Files(x86)\ MSBuild\12.0\bin\Microsoft.Common.CurrentVersion.targe ts(1635,5):警告MSB3276:发现同一依赖程序集的不同版本之间存在冲突.请在项目文件中将"AutoGenerateBindingRedirects"属性设置为true.有关详细信息,请参阅http://go.microsoft.com/fwlink/?LinkId = 294190.

使用/ verbosity编译时,或者更详细的警告版本:详细

考虑从版本"1.2.11.0"[]到版本"1.2.13.0"[Z:\ xxx\packages\log4net.2.0.3\lib \]的app.config重新映射程序集"log4net,Culture = neutral,PublicKeyToken = 669e0ddf0bb1aa2a" net40-full\log4net.dll]解决冲突并摆脱警告.C:\ Program Files(x86)\ MSBuild\12.0\bin\Microsoft.Common.CurrentVersion.targets(1635,5):警告MSB3276:发现同一依赖程序集的不同版本之间存在冲突.请在项目文件中将"AutoGenerateBindingRedirects"属性设置为true.有关详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkId=294190.[Z:\ xxx\xxx\xxx\xxx.csproj]
AssemblyFoldersEx位置:"{Registry:Software\Microsoft.NETFramework,v4.5,AssemblyFoldersEx}"

我理解它意味着什么,遗憾的是我无法追踪哪个项目/库仍然引用旧版本的log4net.我知道我可以通过简单地重新映射到app.config来掩盖警告,但它似乎在地毯下扫除问题而不是实际解决它.

在我的解决方案中我追踪旧版log4net的最佳方法是什么?我已经尝试了所有显而易见的事情,包括搜索所有文件的版本号.我还确保没有其他nupkgs将依赖项设置为此特定版本的log4net.

任何帮助将非常感激.

.net msbuild nuget

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