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

she*_*ira 6 .net c# msbuild fo-dicom visual-studio-2019

我正在使用 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>
Run Code Online (Sandbox Code Playgroud)

发出另一个警告

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

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

Mig*_*Jay 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>
Run Code Online (Sandbox Code Playgroud)

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


she*_*ira 2

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

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

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

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