混合使用ASP.Net和.Net Standard 2.0项目的Release版本构建中出现SGEN错误解决方案

6
我正在处理一个包含3个项目的Visual Studio 2017解决方案:
两个基于 .Net Standard 2.0 的类库 (任意 CPU) 一个基于 .Net Framework 4.6.1 的 ASP.Net 项目 (任意 CPU)
如果我在 Debug (任意 CPU) 下编译所有项目,一切正常运行。
但如果我在 Release (任意 CPU) 下编译所有项目,则会在输出窗口中显示以下错误信息:
SGEN : error : 尝试加载一个格式不正确的程序集: C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\Microsoft\Microsoft.NET.Build.Extensions\net461\ref\netfx.force.conflicts.dll.
该如何解决这个问题?

2
我遇到了类似的问题,但是我的dll来源不同。SGEN尝试加载格式不正确的程序集:C:\Program Files(x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Microsoft\Microsoft.NET.Build.Extensions\net461\ref\netfx.force.conflicts.dll。 - brianfeucht
2个回答

5

错误源于在解析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>

嘿,添加后,它可以无错误地构建!这是安全的吗?========== 重新生成全部:4 成功,0 失败,0 跳过 ========== - Tony
2
一定不能有任何副作用。我在60多个项目上运行它,没有任何运行时问题。 - Dag Baardsen

0
在我的情况下,这个错误是由于项目中安装的包不正确导致的。即使您卸载了安装的不正确的包,它仍然报告错误,解决方案如下:
  1. 确保使用“强制卸载,即使有依赖项”选项卸载该包
  2. 即使按照步骤1操作后仍然遇到相同的错误,也可以在解决方案资源管理器中展开“引用”节点,删除可能作为安装不正确的包的一部分安装的不需要的dll文件。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接