关于 VSTS 上格式不正确的程序集的 SGEN 错误

SGEN error about assembly with incorrect format on VSTS

我有一个具有以下(简化)结构的解决方案:

Application.sln
|- Business.csproj
|- DAL.vbproj

两个项目都以 .NET Framework 4.5.2 为目标。它在本地和 VSTS 中构建。

我现在已将 DAL 项目中的 NuGet 包引用添加到 .NET Standard 1.1 dll。它仍然在我的本地机器上完美构建,但不再在 VSTS 上构建。我收到以下错误:

SGEN : error : An attempt was made to load an assembly with an incorrect format: C:\Program Files\dotnet\sdk\NuGetFallbackFolder\system.runtime.interopservices.runtimeinformation.3.0\ref\netstandard1.1\System.Runtime.InteropServices.RuntimeInformation.dll. [E:\VstsAgents\_work\s\Src\Business\Business.csproj]

请注意 VSTS 似乎在抱怨 Business.csproj 而不是 DAL.vbproj。尽管 Business 确实引用了 DAL。

我已阅读有关 .NET Standard 1.1 不支持 SGEN 的信息,但如果将生成序列化程序集的选项设置为 Auto,它应该可以工作。我所有的项目都将其设置为自动。

我也读到了你应该如何 change the build definition,但是

我应该调查 the .NET Core Xml Serializer Generator 吗?理想情况下,我只想让我的 NuGet 包的构建跳过 SGEN。

更新

system.debug 选项设置为 true 可为我们提供更多信息。我们收到一条错误消息:cannot load a reference assembly for execution。我们也能够在本地复制它。我的机器安装了 .NET 4.7.1 SDK 和目标包,但另一台本地机器没有。安装修复它。我们现在正在考虑将它安装在构建机器上(显然,VSTS 被设置为使用本地代理)。

我相信这些是相关的日志行:

2018-02-14T10:03:33.4980817Z ##[error]SGEN(0,0): Error : An attempt was made to load an assembly with an incorrect format: C:\Program Files\dotnet\sdk\NuGetFallbackFolder\system.runtime.interopservices.runtimeinformation.3.0\ref\netstandard1.1\System.Runtime.InteropServices.RuntimeInformation.dll.
2018-02-14T10:03:33.4980817Z ##[debug]Processed: ##vso[task.logissue type=Error;sourcepath=SGEN;linenumber=0;columnnumber=0;code=;]An attempt was made to load an assembly with an incorrect format: C:\Program Files\dotnet\sdk\NuGetFallbackFolder\system.runtime.interopservices.runtimeinformation.3.0\ref\netstandard1.1\System.Runtime.InteropServices.RuntimeInformation.dll.
2018-02-14T10:03:33.4980817Z    108>SGEN : error : An attempt was made to load an assembly with an incorrect format: C:\Program Files\dotnet\sdk\NuGetFallbackFolder\system.runtime.interopservices.runtimeinformation.3.0\ref\netstandard1.1\System.Runtime.InteropServices.RuntimeInformation.dll. [E:\VstsAgents\_work\s\Src\Business\Business.csproj]
2018-02-14T10:03:33.4980817Z            - Could not load file or assembly 'file:///C:\Program Files\dotnet\sdk\NuGetFallbackFolder\system.runtime.interopservices.runtimeinformation.3.0\ref\netstandard1.1\System.Runtime.InteropServices.RuntimeInformation.dll' or one of its dependencies. Reference assemblies should not be loaded for execution.  They can only be loaded in the Reflection-only loader context. (Exception from HRESULT: 0x80131058)
2018-02-14T10:03:33.4980817Z            - Cannot load a reference assembly for execution.

```

显然,在构建代理上安装 .NET 4.7.1 已为我们修复了它。