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

 mobiledu2502880383 发布于 2022-12-27 13:10

我们正在使用VS2013和.Net 4.5.1(最近已迁移,但此错误来自.Net 4.0).仅在平台目标x64中编译项目时才会发生此错误.这真的是一个会在运行时中断的错误吗?为什么MSBUILD无法正确解析此mrcorlib.dll?这仅在VS2010中创建的项目中发生,并且不会在新创建的项目中发生.我在这里想念的是什么 我所有的第三方程序集都是x64bit.

在TeamCity构建服务器中,我收到以下错误:

GenerateSatelliteAssemblies
[17:01:18]AL
[17:01:18]C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools\AL.exe /culture:de /keyfile:..\..\MyApp.snk /out:obj\x64\Release\de\MyApp.Hardware.Softing.resources.dll /platform:x64 /template:obj\x64\Release\MyApp.Hardware.Softing.dll /embed:obj\x64\Release\MyApp.Hardware.Softing.Properties.Resources.de.resources
[17:01:18]ALINK warning AL1073: Referenced assembly 'mscorlib.dll' targets a different processor

Matt Smith.. 31

这是一个解决方法:

通过使用与您尝试构建的平台(或位数)匹配的AL.EXE可以避免此问题.也就是说,当你构建x64时,你会看到它试图在类似于路径的路径上使用AL.EXE

C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6 Tools

如果你可以使用它的x64版本的AL.exe,问题就会消失.也就是说,在类似于以下的路径上使用AL.EXE:

C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6 Tools\x64

Msbuild通过使用它找到此路径TargetFrameworkSDKToolsDirectory.因此,假设在构建x86时此目录是正确的目录,下面的解决方法基本上将x64子目录附加到构建x64的路径上,并保留原样:

    创建一个MsBuildAL1073WarningWorkaround.targets文件(名称无关紧要)并将其添加到项目中.它具有以下内容:

    
    
      
        $(TargetFrameworkSDKToolsDirectory)$(PlatformTarget)\
      
      
    

    编辑.csproj文件以在文件末尾附近导入此文件(您将在其中看到"修改构建过程..."的注释:

     
     
    

看起来像添加` $(TargetFrameworkSDKToolsDirectory)$(PlatformTarget)\ `项目文件删除警告 (8认同)

这无疑为我指明了正确的方向,但最终没有解决我的问题。只需按照@IAN的建议添加PropertyGroup即可添加警告。请参阅https://thorarin.net/blog/post/2019/02/08/al1703-warning-mscorlib.aspx作为我的解决方案。 (2认同)


JerryGoyal.. 14

这些警告显示在解决方案中包含本地化附属程序集(.resx文件)的项目中.

这是微软方面的错误,截至2017年8月,微软仍然没有修复它.

以下是MS反馈页面的引用:

它是由.NET框架二进制alink.dll中的逻辑错误引起的.但鉴于此问题影响有限以及此工具具有很高的服务标准,我们不会对此问题进行更改.

问候,

Ed Maurer开发主管,VB和C#编译器


jero2rome.. 8

可以安全地忽略此警告.由于.Net将在64位机器上运行时加载正确的64位组件.微软仍然可以为这个问题提供可靠的答案.浪费警告是不必要的时间.

5 个回答
  • 这些警告显示在解决方案中包含本地化附属程序集(.resx文件)的项目中.

    这是微软方面的错误,截至2017年8月,微软仍然没有修复它.

    以下是MS反馈页面的引用:

    它是由.NET框架二进制alink.dll中的逻辑错误引起的.但鉴于此问题影响有限以及此工具具有很高的服务标准,我们不会对此问题进行更改.

    问候,

    Ed Maurer开发主管,VB和C#编译器

    2022-12-27 13:11 回答
  • 这是一个解决方法:

    通过使用与您尝试构建的平台(或位数)匹配的AL.EXE可以避免此问题.也就是说,当你构建x64时,你会看到它试图在类似于路径的路径上使用AL.EXE

    C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6 Tools

    如果你可以使用它的x64版本的AL.exe,问题就会消失.也就是说,在类似于以下的路径上使用AL.EXE:

    C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6 Tools\x64

    Msbuild通过使用它找到此路径TargetFrameworkSDKToolsDirectory.因此,假设在构建x86时此目录是正确的目录,下面的解决方法基本上将x64子目录附加到构建x64的路径上,并保留原样:

      创建一个MsBuildAL1073WarningWorkaround.targets文件(名称无关紧要)并将其添加到项目中.它具有以下内容:

      <?xml version="1.0" encoding="utf-8"?>
      <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
        <PropertyGroup>
          <TargetFrameworkSDKToolsDirectory Condition=" '$(PlatformTarget)' == 'x64'">$(TargetFrameworkSDKToolsDirectory)$(PlatformTarget)\</TargetFrameworkSDKToolsDirectory>
        </PropertyGroup>
      </Project>  
      

      编辑.csproj文件以在文件末尾附近导入此文件(您将在其中看到"修改构建过程..."的注释:

       <Import Project="MsBuildAL1073WarningWorkaround.targets" />
       <!-- To modify your build process... -->
      

    2022-12-27 13:11 回答
  • 虽然@ jero2rome引用的错误因为无法修复而关闭,但VS2015 RC w/.NET 4.6不再发出此警告:

    从VS2013/.NET 4.5.1,我会看到同样的问题:

    GenerateSatelliteAssemblies:
    C:\Program Files (x86)\Microsoft SDKs\Windows\v8.1A\bin\NETFX 4.5.1 Tools\AL.exe /culture:zh-CHT /out:obj\x64\Debug\zh-CHT\MyComponent.resources.dll /platform:x64 /template:obj\x64\Debug\MyComponent.dll /embed:obj\x64\Debug\MyComponent.Resources.string.zh-CHT.resources
    ALINK : warning AL1073: Referenced assembly 'mscorlib.dll' targets a different processor [c:\svn\project\MyComponent.csproj]
    

    使用VS2015 RC/.NET 4.6,不会发出警告:

    GenerateSatelliteAssemblies:
    C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6 Tools\x64\AL.exe /culture:zh-CHT /out:obj\x64\Debug\zh-CHT\MyComponent.resources.dll /platform:x64 /template:obj\x64\Debug\MyComponent.dll /embed:obj\x64\Debug\MyComponent.Resources.string.zh-CHT.resources
    

    2022-12-27 13:11 回答
  • 可以安全地忽略此警告.由于.Net将在64位机器上运行时加载正确的64位组件.微软仍然可以为这个问题提供可靠的答案.浪费警告是不必要的时间.

    2022-12-27 13:13 回答
  • 我们遇到了同样的问题,最终得到了Matt Smith的解决方法(/sf/ask/17360801/),其中一项修改使其成功.

    由于MsBuild中的功能/错误(/sf/ask/17360801/),我们需要修改步骤1中描述的目标文件.

    <?xml version="1.0" encoding="utf-8"?>
    <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
        <Target Name="MsBuildAL1073WarningWorkaround" BeforeTargets="BeforeBuild" >
            <PropertyGroup Condition="'$(Platform)' == 'x64'">
                <TargetFrameworkSDKToolsDirectory>$(TargetFrameworkSDKToolsDirectory)$(Platform)\</TargetFrameworkSDKToolsDirectory>
            </PropertyGroup>
        </Target>
    </Project>
    

    2022-12-27 13:16 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有