【发布时间】: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
但是:
我使用的是 .NET CORE 2.2 而不是 4.x
那里提出的解决方案不适用于 .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