【问题标题】:.NET CORE ALINK : warning AL1073: Referenced assembly 'mscorlib.dll' targets a different processor.NET CORE ALINK:警告 AL1073:引用的程序集“mscorlib.dll”针对不同的处理器
【发布时间】:2019-10-25 09:08:23
【问题描述】:

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

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

我知道这与问题很接近:ALINK : warning AL1073: Referenced assembly 'mscorlib.dll' targets a different processor

但是:

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

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

特别是尝试添加:

<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 工具似乎是一个可以接受的解决方案。

【问题讨论】:

  • 嗨,这个问题有什么更新吗?您能否分享一些细节以帮助重现此问题?如果您创建一个新的 .net core 项目,并将其目标平台设置为 x64,会出现此问题吗?我无法重现此问题以进行进一步的故障排除:(
  • 我更新了问题以回答您的评论,因为评论中没有足够的位置。
  • fo-dicom 包含仅适用于 Desktop 和 Universal 平台的本机编解码器库。对于平台 NetCore fo-dicom 不提供编解码器。那么,您是否在 netcore 程序集中引用为 netframework452 编译的桌面程序集?也许这会导致警告。
  • 如果您需要对所有编解码器的支持并在 netCore 上编译,请使用来自 Efferent 的出色软件包:nuget.org/packages/Efferent.Native
  • 如果您引用 nugetpackage “fo-dicom”,则 Visual Studio 应根据您的项目类型选择正确的版本。您可以明确选择“fo-dicom.Desktop”或“fo-dicom.netCore”。所以你不需要他们两个。

标签: c# .net msbuild visual-studio-2019 fo-dicom


【解决方案1】:

旧的解决方法仍然有效,但必须在GenerateSatelliteAssemblies 目标之前完成。当它在项目文件中添加为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 存储库中有一个 open issue 与此相关。

【讨论】:

  • 问题已关闭,看起来一旦您获得 msbuild v16.10.0-preview-21181-07 或更高版本,警告就会消失
【解决方案2】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2014-10-11
    • 1970-01-01
    • 1970-01-01
    • 2011-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-01
    相关资源
    最近更新 更多