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

Ton*_*ony 6 .net asp.net .net-core

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


.Net Framework 2.0(任何CPU)中的两个类库.Net Framework 4.6.1中的一个ASP.Net(任何CPU)

如果我在调试中构建所有(任何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.

怎么解决?

Dag*_*sen 5

The error stems from confusion between NETStandard and NuGet libraries when resolving dlls. Put this into your failing project's .csproj file (Unload project, Edit .csproj file):

<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>
Run Code Online (Sandbox Code Playgroud)

  • 绝对应该没有副作用。我在 60 多个项目上运行它,没有任何运行时问题。 (2认同)