PostSharp的问题在没有项目引用system.web.mvc的3.0.0.0版本时找不到程序集
本文关键字:mvc 版本 程序集 找不到 web system 问题 引用 项目 PostSharp | 更新日期: 2023-09-27 18:25:11
我使用的是PostSharp,运行良好。最近,我们将一些项目升级到了MVC 5.2版本。今天,我加载了一个使用MVC 4.0版本的旧项目。PostSharp在构建时开始报告一个奇怪的错误:
Error 17 Unhandled exception (3.1.42.0, 32 bit, CLR 4.5, Release): PostSharp.Sdk.CodeModel.AssemblyLoadException: Cannot find assembly 'system.web.mvc, version=3.0.0.0, culture=neutral, publickeytoken=31bf3856ad364e35'. [Version mismatch]
============ PostSharp Assembly Loading Log ===================
LOG: Finding the assembly with binding identity 'system.web.mvc, version=3.0.0.0, culture=neutral, publickeytoken=31bf3856ad364e35'.
LOG: Found file 'C:'Program Files (x86)'Microsoft ASP.NET'ASP.NET MVC 4'Assemblies'System.Web.Mvc.dll' with identity 'system.web.mvc, version=4.0.0.0, culture=neutral, publickeytoken=31bf3856ad364e35, processorarchitecture=msil'.
LOG: Reference mismatch for 'C:'Program Files (x86)'Microsoft ASP.NET'ASP.NET MVC 4'Assemblies'System.Web.Mvc.dll' [VersionMismatch].
LOG: Probing location 'C:'ProgramData'PostSharp'3.1.42'bin.Release'System.Web.Mvc.exe' because this directory was explicitly added to the search path [File Not Found].
LOG: Probing location 'C:'ProgramData'PostSharp'3.1.42'bin.Release'System.Web.Mvc.dll' because this directory was explicitly added to the search path [File Not Found].
LOG: Probing location 'C:'ProgramData'PostSharp'3.1.42'bin.Release'System.Web.Mvc.winmd' because this directory was explicitly added to the search path [File Not Found].
LOG: Probing location 'C:'Work'Work'CodeBase'C#'CS'+Frameworks'v5'BusinessLogic_CS_v5'bin'Debug'System.Web.Mvc.exe' because this directory was explicitly added to the search path [File Not Found].
LOG: Probing location 'C:'Work'Work'CodeBase'C#'CS'+Frameworks'v5'BusinessLogic_CS_v5'bin'Debug'System.Web.Mvc.dll' because this directory was explicitly added to the search path [File Not Found].
LOG: Probing location 'C:'Work'Work'CodeBase'C#'CS'+Frameworks'v5'BusinessLogic_CS_v5'bin'Debug'System.Web.Mvc.winmd' because this directory was explicitly added to the search path [File Not Found].
LOG: Probing location 'C:'Work'Work'CodeBase'C#'CS'+Frameworks'v5'BusinessLogic_CS_v5'obj'Debug'System.Web.Mvc.exe' because this directory was explicitly added to the search path [File Not Found].
LOG: Probing location 'C:'Work'Work'CodeBase'C#'CS'+Frameworks'v5'BusinessLogic_CS_v5'obj'Debug'System.Web.Mvc.dll' because this directory was explicitly added to the search path [File Not Found].
LOG: Probing location 'C:'Work'Work'CodeBase'C#'CS'+Frameworks'v5'BusinessLogic_CS_v5'obj'Debug'System.Web.Mvc.winmd' because this directory was explicitly added to the search path [File Not Found].
LOG: Probing location 'C:'Program Files (x86)'Reference Assemblies'Microsoft'Framework'.NETFramework'v4.5.1'System.Web.Mvc.exe' because this directory was explicitly added to the search path [File Not Found].
LOG: Probing location 'C:'Program Files (x86)'Reference Assemblies'Microsoft'Framework'.NETFramework'v4.5.1'System.Web.Mvc.dll' because this directory was explicitly added to the search path [File Not Found].
LOG: Probing location 'C:'Program Files (x86)'Reference Assemblies'Microsoft'Framework'.NETFramework'v4.5.1'System.Web.Mvc.winmd' because this directory was explicitly added to the search path [File Not Found].
LOG: Probing location 'C:'Program Files (x86)'Reference Assemblies'Microsoft'Framework'.NETFramework'v4.5.1'Facades'System.Web.Mvc.exe' because this directory was explicitly added to the search path [File Not Found].
LOG: Probing location 'C:'Program Files (x86)'Reference Assemblies'Microsoft'Framework'.NETFramework'v4.5.1'Facades'System.Web.Mvc.dll' because this directory was explicitly added to the search path [File Not Found].
LOG: Probing location 'C:'Program Files (x86)'Reference Assemblies'Microsoft'Framework'.NETFramework'v4.5.1'Facades'System.Web.Mvc.winmd' because this directory was explicitly added to the search path [File Not Found].
LOG: Looking in GAC for System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=x86.
LOG: Looking in GAC for System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=msil.
LOG: Looking in GAC for System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35.
LOG: The assembly 'system.web.mvc, version=3.0.0.0, culture=neutral, publickeytoken=31bf3856ad364e35' was not found.
===============================================================
at PostSharp.Sdk.CodeModel.Domain.GetAssembly(IAssemblyName assemblyName, BindingOptions bindingOptions)
at PostSharp.Sdk.CodeModel.AssemblyRefDeclaration.^5YpB0scd(BindingOptions _0)
at PostSharp.Sdk.CodeModel.AssemblyRefDeclaration.GetAssemblyEnvelope(BindingOptions bindingOptions)
at PostSharp.Sdk.CodeModel.TypeRefDeclaration.GetTypeDefinition(BindingOptions bindingOptions)
at PostSharp.Sdk.CodeModel.TypeRefDeclaration.GetTypeDefinition()
at PostSharp.Sdk.CodeModel.CompareExtensions.DefinitionMatchesReference(INamedType definition, INamedType reference, BindingOptions options)
at PostSharp.Sdk.CodeModel.TypeRefDeclaration.^A9yFoe2uB3TC(ITypeSignature _0, BindingOptions _1)
at PostSharp.Sdk.CodeModel.CompareExtensions.DefinitionMatchesReference(IMethodSignature definition, IMethodSignature reference, BindingOptions options)
at PostSharp.Sdk.CodeModel.Binding.MethodSignatureComparer.Equals(IMethodSignature x, IMethodSignature y)
at System.Collections.Generic.Dictionary`2.FindEntry(TKey key)
at System.Collections.Generic.Dictionary`2.TryGetValue(TKey key, TValue& value)
at ^/vWxD3eYDOIx.^wdkNIZCy[??0](^/fRRnkiTvxqu _0, ??0 _1, ^EyL1LQX01Ck8 _2, ^0RC0kpHqS6Uy _3, Dictionary`2 _4, Int32 _5, Int32 _6)
at PostSharp.Sdk.Binary.ModuleWriter.SetMemberSignatureIndex(MemberRefDeclaration _0, ^EyL1LQX01Ck8 _1, ^0RC0kpHqS6Uy _2)
at PostSharp.Sdk.Binary.ModuleWriter.WriteMemberRef(MemberRefDeclaration _0, MetadataToken _1)
at PostSharp.Sdk.Binary.ModuleWriter.GetMappedDeclarationToken(MetadataDeclaration _0)
at PostSharp.Sdk.Binary.ModuleWriter.SetMappedMetadataToken(MetadataDeclaration _0, UInt32* _1)
at ^R00FfLNj7vE0.^rk33N/hO(OpCodeNumber _0, MetadataDeclaration _1)
at ^R00FfLNj7vE0.EmitInstructionMethod(OpCodeNumber _0, IMethod _1)
at PostSharp.Sdk.CodeModel.Instruction.Write(BaseInstructionWriter writer, InstructionPrefixes allowedPrefixes)
at ^zpGNRK5nUM9z.^x98p/iJs13L+(InstructionReader _0)
at PostSharp.Sdk.CodeModel.MethodBodyDeclaration.^uPrQJ6gs(InstructionBlock _0, IMethodBodyVisitor[] _1, MethodBodyVisitLevel _2, InstructionAction _3, InstructionReader _4, InstructionBlockExceptionHandlingKind _5)
at ^zpGNRK5nUM9z.^e2BtLyuT(^Kh85h0nXrulm& _0, Int32& _1)
at ^zpGNRK5nUM9z.^SkiT(BufferWriter _0)
at PostSharp.Sdk.Binary.ModuleWriter.WriteMethodBodies(BufferWriter _0, UInt32 _1)
at ^Up6wxUIUnN6a.^VfvrABjR()
at ^Up6wxUIUnN6a.^SkiT()
at ^cyC/TYSlPGB/.^wvPm(^RtksFin57NJ8 _0, ^8gP93Xsl'+Imn _1)
at PostSharp.Sdk.Extensibility.Tasks.CompileTask.Execute()
at PostSharp.Sdk.Extensibility.Project.ExecutePhase(String phase)
at PostSharp.Sdk.Extensibility.Project.Execute()
at PostSharp.Hosting.PostSharpObject.ExecuteProjects()
at PostSharp.Hosting.PostSharpObject.InvokeProject(ProjectInvocation projectInvocation). C:'Work'Work'CodeBase'C#'CS'+Frameworks'v5'BusinessLogic_CS_v5'BusinessLogic_CS_v5.csproj BusinessLogic_CS_v5
我浏览了所有的项目参考资料,没有一个项目引用system.web.mvc, version=3.0.0.0
。所有项目都引用了4.0.0.0
。为什么它提到3.0.0.0版本?它可能是从某个GAC或某个本地安装中找到的吗?
如果我在项目属性中禁用PostSharp,则项目编译成功。所以它一定和PostSharp有关。如果有任何帮助,我们将不胜感激,因为我对感到困惑
当某些第三方程序集引用旧版本的System.Web.Mvc时,通常会引发此错误。Web.config中有绑定重定向,但您还需要告诉PostSharp在生成过程中使用该配置。您可以通过将PostSharpHostConfigurationFile
构建属性设置为*.config文件的路径来完成此操作。
<PropertyGroup>
<PostSharpHostConfigurationFile>web.config</PostSharpHostConfigurationFile>
</PropertyGroup>
在[project].csproj文件中添加以下代码。要实现这一点,请遵循以下步骤:
- 右键单击您的项目
- 卸载项目
- 然后右键单击卸载的项目,然后单击Edit[project].csproj
- 查找PostSharp的标签
<Import Project
- 然后在
<Import Project .../>
标签的正下方添加以下代码 - 然后重新加载项目
代码:
<PropertyGroup>
<PostSharpHostConfigurationFile>web.config</PostSharpHostConfigurationFile>
</PropertyGroup>
您的xml代码应该看起来像:
<Import Project="..'..'packages'PostSharp.4.0.42'tools'PostSharp.targets" Condition="Exists('..'..'packages'PostSharp.4.0.42'tools'PostSharp.targets')" />
<PropertyGroup>
<PostSharpHostConfigurationFile>web.config</PostSharpHostConfigurationFile>
</PropertyGroup>
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>