6

我正在使用 VS2019 和 .NET CORE 2.2 我收到警告 AL1073

ALINK 警告 AL1073:引用的程序集“mscorlib.dll”针对不同的处理器

我知道这与问题很接近:ALINK:警告 AL1073:引用的程序集“mscorlib.dll”针对不同的处理器

但:

  1. 我使用的是 .NET CORE 2.2 而不是 4.x

  2. 那里提出的解决方案不适用于 .NET 核心

特别是,尝试添加:

<PropertyGroup> 
<TargetFrameworkSDKToolsDirectory Condition=" '$(PlatformTarget)' == 'x64'">$(TargetFrameworkSDKToolsDirectory)\$(PlatformTarget)\
</TargetFrameworkSDKToolsDirectory>
</PropertyGroup>

发出另一个警告

警告 MSB3084 任务试图在两个位置找到“al.exe”。1) 在基于 SdkToolsPath 生成的“\x64\”处理器特定目录下 2) 由 SDKToolsPath 属性指定的“\x64\”下的 x86 特定目录。您可以通过执行以下操作之一来解决该问题: 1) 将“SDKToolsPath”属性设置为 Microsoft Windows SDK 的位置。C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin\Microsoft.Common.CurrentVersion.targets

真的很奇怪,因为根据警告的位置是一样的!

另外:我很乐意抑制构建设置中的警告,因为我所有的单元测试都通过了,但是将 1073 添加到列表中对仍然出现的 AL1073 警告没有影响。

或者,警告建议:将“SDKToolsPath”属性设置为 Microsoft Windows SDK 的位置,我该怎么做?

更新回答评论:这很难在简单的设置中重现。该项目特别引用了几个 Github 项目(fo-dicom)。fo-dicom 库使用为 32 和 64 平台构建的映像库。我确实尝试设置为 64 位,但没有帮助。我看到其他人在 VS 社区中提出了抑制警告似乎有问题的错误:https ://developercommunity.visualstudio.com/content/problem/224196/suppress-warnings-from-project-settings-build-does.html 。该问题已关闭,没有后续行动,MSFT 表示不会修复 AL 1073,但我想禁用!使用持续集成时不会出现警告...

我现在正在尝试重新编译 .NET CORE 3.0 中的所有内容,如果可行,将提供更新。

更新: 在 .NET CORE 3.0 中重新编译后,我仍然遇到问题。

我还发现了这个问题的另一个原因(在其他 SO 文章中提到,但对于 .NET 4.x。确实,我看到资源文件也出现了这个问题,但是对于 .NET Core,我们看不到“生成卫星程序集”消息,因此很难将编译器警告链接到资源文件的生成。

为了解决这个问题,我将 al.exe 文件从 C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.8 Tools\x64 复制到我的解决方案到 Tools64 中,并将以下内容添加到我的.csproj

<PropertyGroup>
  <TargetFrameworkSDKToolsDirectory>..\Tools64</TargetFrameworkSDKToolsDirectory>
  </PropertyGroup>

将 SDKToolsDirectory 直接设置到原始位置不起作用。在我使用 devops 构建服务器进行持续集成的情况下,不会额外使用绝对路径(路径可能不同)。在本地复制 al.exe 工具似乎是一个可以接受的解决方案。

4

2 回答 2

5

旧的解决方法仍然有效,但必须在GenerateSatelliteAssemblies目标之前完成。当它作为 a 添加PropertyGroup到项目文件中时,它将被解释得太晚,从而导致两个位置警告。

Marcel Veldhuizen所示,可以通过添加以下目标使其工作:

<Target Name="FixAL1703Warning" BeforeTargets="GenerateSatelliteAssemblies" Condition="'$(PlatformTarget)' == 'x64'">
  <Message Text="Adjusting SDK tools directory to use x64 version of AL.EXE">
  <PropertyGroup>
    <TargetFrameworkSDKToolsDirectory>$(TargetFrameworkSDKToolsDirectory)$(PlatformTarget)\</TargetFrameworkSDKToolsDirectory>
  </PropertyGroup>
</Target>

注意:目前在 GitHub 上的 msbuild 存储库中有一个未解决的问题。

于 2020-12-24T09:30:51.163 回答
2

我能够解决这个问题,就我而言,我似乎需要两件事:

  1. 来自 gofal3 的建议,我引用了 .NET core fo-dicom 包和 fo-dicom 依赖项(但不是 fo-dicom 桌面)。

  2. 似乎我对 Microsoft.ServiceFabric 有一个旧的引用,似乎该引用需要 64 位,否则我们会收到警告(Azure Service Fabric 32 位支持

Lance:我尝试了博客中的建议来删除警告,但这对我的情况没有帮助。请注意,从警告中我得到的路径是相同的。

于 2019-10-30T07:11:25.363 回答