构建发布版混合ASP.Net和.Net Standard 2.0项目的SGEN错误解决方案

时间:2017-09-21 13:21:25

标签: asp.net .net .net-core

我正在开发一个包含3个项目的Visual Studio 2017解决方案:

.Net Standard 2.0(任何CPU)中的两个类库

.Net Framework 4.6.1(任何CPU)中的一个ASP.Net

如果我在调试中构建所有内容(任何CPU),一切运行正常 但是如果我在Release(任何CPU)中构建所有内容,则在输出窗口中显示此错误:

  

3> SGEN:错误:尝试加载格式不正确的程序集:C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Community \ MSBuild \ Microsoft \ Microsoft.NET.Build.Extensions \ net461 \ REF \ netfx.force.conflicts.dll。

如何解决?

2 个答案:

答案 0 :(得分:4)

错误源于解析dll时NETStandard和NuGet库之间的混淆。把它放到你失败的项目的.csproj文件中(卸载项目,编辑.csproj文件):

<Target Name="ReplaceNetFxNetStandardRefWithLib" AfterTargets="ImplicitlyExpandNETStandardFacades">
  <ItemGroup>
    <Reference Remove="@(_NETStandardLibraryNETFrameworkReference)" Condition="'%(FileName)' != 'netfx.force.conflicts'" />
    <Reference Remove="@(_NETStandardLibraryNETFrameworkReference)" Condition="'%(FileName)' != 'System.Configuration.ConfigurationManager'" />
    <Reference Include="@(_NETStandardLibraryNETFrameworkLib)">
      <Private>true</Private>
    </Reference>
  </ItemGroup>
</Target>
<Target Name="RemoveNetFxForceConflicts" AfterTargets="ResolveAssemblyReferences">
  <ItemGroup>
    <ReferencePath Remove="@(ReferencePath)" Condition="'%(FileName)' == 'netfx.force.conflicts'" />
    <ReferencePath Remove="@(ReferencePath)" Condition="'%(FileName)' == 'System.Configuration.ConfigurationManager'" />
  </ItemGroup>
</Target>

答案 1 :(得分:0)

在我的例子中,这个错误是由于项目中安装的包不正确而报告的。虽然卸载了安装错误的包还是报错,解决方法是

  1. 确保使用“即使存在依赖项也强制卸载”选项来卸载包
  2. 即使在执行第 1 步之后,如果您仍然遇到相同的 sgent 错误,请在解决方案资源管理器中展开“参考”节点,删除可能在安装错误包时安装的不需要的 dll。