发布版本中的PostSharp中的AssemblyLoadException

时间:2014-09-11 22:54:19

标签: json.net postsharp

我有几个项目都包含json.net 6.0.3 NuGet包。当我添加:

using Newtonsoft.Json;

构建时出现以下错误:

  

1> F:\ TwinkyTalk \ TwinkyTalk.csproj:错误PS0099:未处理的异常   (3.1.48.0,32位,CLR 4.5,发布):   PostSharp.Sdk.CodeModel.AssemblyLoadException:找不到程序集   ' newtonsoft.json,版本= 4.5.0.0,文化=中立,   公钥= 30ad4fe6b2a6aeed&#39 ;. [版本不匹配]   1> F:\ TwinkyTalk \ TwinkyTalk.csproj:错误PS0099:============   PostSharp Assembly Loading日志===================   1> F:\ TwinkyTalk \ TwinkyTalk.csproj:错误PS0099:日志:查找   具有绑定标识的程序集&newtonsoft.json,版本= 4.5.0.0,   culture = neutral,publickeytoken = 30ad4fe6b2a6aeed'。   1> F:\ TwinkyTalk \ TwinkyTalk.csproj:错误PS0099:日志:找到的文件   ' F:\包\ Newtonsoft.Json.6.0.3 \ LIB \ net45 \ Newtonsoft.Json.dll'同   身份' newtonsoft.json,版本= 6.0.0.0,文化=中立,   publickeytoken = 30ad4fe6b2a6aeed,processorarchitecture = msil'。   1> F:\ TwinkyTalk \ TwinkyTalk.csproj:错误PS0099:日志:参考   不匹配   ' F:\包\ Newtonsoft.Json.6.0.3 \ LIB \ net45 \ Newtonsoft.Json.dll'   [版本不匹配]。 1> F:\ TwinkyTalk \ TwinkyTalk.csproj:错误PS0099:   日志:探测位置   ' C:\ ProgramData \ PostSharp \ 3.1.48 \ bin.Release \ Newtonsoft.Json.exe'   因为此目录已明确添加到搜索路径[文件   未找到]。 1> F:\ TwinkyTalk \ TwinkyTalk.csproj:错误PS0099:日志:   探索位置   ' C:\ ProgramData \ PostSharp \ 3.1.48 \ bin.Release \ Newtonsoft.Json.dll'   因为此目录已明确添加到搜索路径[文件   未找到]。 1> F:\ TwinkyTalk \ TwinkyTalk.csproj:错误PS0099:日志:   探索位置   ' C:\ ProgramData \ PostSharp \ 3.1.48 \ bin.Release \ Newtonsoft.Json.winmd'   因为此目录已明确添加到搜索路径[文件   未找到]。 1> F:\ TwinkyTalk \ TwinkyTalk.csproj:错误PS0099:日志:   探测位置' F:\ bin \ release \ TwinkyTalk \ Newtonsoft.Json.exe'   因为此目录已明确添加到搜索路径[文件   未找到]。 1> F:\ TwinkyTalk \ TwinkyTalk.csproj:错误PS0099:日志:   找到文件' F:\ bin \ release \ TwinkyTalk \ Newtonsoft.Json.dll'同   身份' newtonsoft.json,版本= 6.0.0.0,文化=中立,   publickeytoken = 30ad4fe6b2a6aeed,processorarchitecture = msil'。   1> F:\ TwinkyTalk \ TwinkyTalk.csproj:错误PS0099:日志:参考   &f; \ bin \ release \ TwinkyTalk \ Newtonsoft.Json.dll'不匹配   [版本不匹配]。 1> F:\ TwinkyTalk \ TwinkyTalk.csproj:错误PS0099:   日志:探测位置   ' F:\ BIN \发布\ TwinkyTalk \ Newtonsoft.Json.winmd'因为这   目录已明确添加到搜索路径[File Not Found]。   1> F:\ TwinkyTalk \ TwinkyTalk.csproj:错误PS0099:日志:探测   location' F:\ TwinkyTalk \ obj \ Release \ Newtonsoft.Json.exe'因为这   目录已明确添加到搜索路径[File Not Found]。   1> F:\ TwinkyTalk \ TwinkyTalk.csproj:错误PS0099:日志:探测   location' F:\ TwinkyTalk \ obj \ Release \ Newtonsoft.Json.dll'因为这   目录已明确添加到搜索路径[File Not Found]。   1> F:\ TwinkyTalk \ TwinkyTalk.csproj:错误PS0099:日志:探测   location' F:\ TwinkyTalk \ obj \ Release \ Newtonsoft.Json.winmd'因为   此目录已明确添加到搜索路径[File Not   发现。 1> F:\ TwinkyTalk \ TwinkyTalk.csproj:错误PS0099:日志:探测   location' C:\ Program Files(x86)\ Reference   大会\微软\ Framework.NETFramework \ V4.5.1 \ Newtonsoft.Json.exe'   因为此目录已明确添加到搜索路径[文件   未找到]。 1> F:\ TwinkyTalk \ TwinkyTalk.csproj:错误PS0099:日志:   探测位置' C:\ Program Files(x86)\ Reference   大会\微软\ Framework.NETFramework \ V4.5.1 \ Newtonsoft.Json.dll'   因为此目录已明确添加到搜索路径[文件   未找到]。 1> F:\ TwinkyTalk \ TwinkyTalk.csproj:错误PS0099:日志:   探测位置' C:\ Program Files(x86)\ Reference   大会\微软\ Framework.NETFramework \ V4.5.1 \ Newtonsoft.Json.winmd'   因为此目录已明确添加到搜索路径[文件   未找到]。 1> F:\ TwinkyTalk \ TwinkyTalk.csproj:错误PS0099:日志:   探测位置' C:\ Program Files(x86)\ Reference   大会\微软\ Framework.NETFramework \ V4.5.1 \外立面\ Newtonsoft.Json.exe'   因为此目录已明确添加到搜索路径[文件   未找到]。 1> F:\ TwinkyTalk \ TwinkyTalk.csproj:错误PS0099:日志:   探测位置' C:\ Program Files(x86)\ Reference   大会\微软\ Framework.NETFramework \ V4.5.1 \外立面\ Newtonsoft.Json.dll'   因为此目录已明确添加到搜索路径[文件   未找到]。 1> F:\ TwinkyTalk \ TwinkyTalk.csproj:错误PS0099:日志:   探测位置' C:\ Program Files(x86)\ Reference   大会\微软\ Framework.NETFramework \ V4.5.1 \外立面\ Newtonsoft.Json.winmd'   因为此目录已明确添加到搜索路径[文件   未找到]。 1> F:\ TwinkyTalk \ TwinkyTalk.csproj:错误PS0099:日志:   在GAC中查找Newtonsoft.Json,Version = 4.5.0.0,Culture = neutral,   PublicKeyToken = 30ad4fe6b2a6aeed,processorArchitecture = x86。   1> F:\ TwinkyTalk \ TwinkyTalk.csproj:错误PS0099:日志:寻找GAC   对于Newtonsoft.Json,Version = 4.5.0.0,Culture = neutral,   PublicKeyToken = 30ad4fe6b2a6aeed,processorArchitecture = msil。   1> F:\ TwinkyTalk \ TwinkyTalk.csproj:错误PS0099:日志:寻找GAC   对于Newtonsoft.Json,Version = 4.5.0.0,Culture = neutral,   公钥= 30ad4fe6b2a6aeed。 1> F:\ TwinkyTalk \ TwinkyTalk.csproj:   错误PS0099:日志:程序集' newtonsoft.json,版本= 4.5.0.0,   culture = neutral,publickeytoken = 30ad4fe6b2a6aeed'没找到。   1> F:\ TwinkyTalk \ TwinkyTalk.csproj:错误PS0099:   ================================================== ============= 1> F:\ TwinkyTalk \ TwinkyTalk.csproj:错误PS0099:at   PostSharp.Sdk.CodeModel.Domain.GetAssembly(IAssemblyName assemblyName,   BindingOptions bindingOptions)1> F:\ TwinkyTalk \ TwinkyTalk.csproj:   错误PS0099:at   PostSharp.Sdk.CodeModel.AssemblyRefDeclaration。^ 5YpB0scd(BindingOptions   _0)1> F:\ TwinkyTalk \ TwinkyTalk.csproj:错误PS0099:在PostSharp.Sdk.Extensibility.Tasks.MulticastAttributeTask。^ SgrhoGlQ(AssemblyRefDeclaration)   _0)1> F:\ TwinkyTalk \ TwinkyTalk.csproj:错误PS0099:在PostSharp.Sdk.Extensibility.Tasks.MulticastAttributeTask。^ + GwnKh4ZYHu3()   1> F:\ TwinkyTalk \ TwinkyTalk.csproj:错误PS0099:at   PostSharp.Sdk.Extensibility.Tasks.MulticastAttributeTask.Execute()   1> F:\ TwinkyTalk \ TwinkyTalk.csproj:错误PS0099:at   PostSharp.Sdk.Extensibility.Project.ExecutePhase(字符串阶段)   1> F:\ TwinkyTalk \ TwinkyTalk.csproj:错误PS0099:at   PostSharp.Sdk.Extensibility.Project.Execute()   1> F:\ TwinkyTalk \ TwinkyTalk.csproj:错误PS0099:at   PostSharp.Hosting.PostSharpObject.ExecuteProjects()   1> F:\ TwinkyTalk \ TwinkyTalk.csproj:错误PS0099:at   PostSharp.Hosting.PostSharpObject.InvokeProject(ProjectInvocation   projectInvocation)。

我无法找到"' newtonsoft.json,version = 4.5.0.0,"在项目中,不确定为什么要这样做。

我尝试设置" Build Host" PostSharp项目属性为托管,但仍然有相同的异常。

2 个答案:

答案 0 :(得分:6)

当一些第三方库引用旧版本的程序集(在本例中为Newtonsoft.Json)时,通常会发生这种情况。通过在web.config / app.config文件中指定绑定重定向来解决此问题。

<dependentAssembly>
  <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral"/>
  <bindingRedirect oldVersion="0.0.0.0-6.0.3.0" newVersion="6.0.3.0"/>
</dependentAssembly>

但是,您还需要告诉PostSharp在哪里查找绑定重定向配置。您可以通过在* .csproj文件中设置 PostSharpHostConfigurationFile 属性来执行此操作:

<PropertyGroup>
  <PostSharpHostConfigurationFile>web.config</PostSharpHostConfigurationFile>
</PropertyGroup>

SO上有另一个类似的问题(PostSharp AssemblyLoadException Autofac)和relevant blog post

答案 1 :(得分:0)

事实证明,虽然异常来自PostSharp,但补救措施是更新所有NuGet包。