我们正在使用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文件以在文件末尾附近导入此文件(您将在其中看到"修改构建过程..."的注释:
看起来像添加`
这无疑为我指明了正确的方向,但最终没有解决我的问题。只需按照@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位组件.微软仍然可以为这个问题提供可靠的答案.浪费警告是不必要的时间.
这些警告显示在解决方案中包含本地化附属程序集(.resx文件)的项目中.
这是微软方面的错误,截至2017年8月,微软仍然没有修复它.
以下是MS反馈页面的引用:
它是由.NET框架二进制alink.dll中的逻辑错误引起的.但鉴于此问题影响有限以及此工具具有很高的服务标准,我们不会对此问题进行更改.
问候,
Ed Maurer开发主管,VB和C#编译器
这是一个解决方法:
通过使用与您尝试构建的平台(或位数)匹配的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... -->
虽然@ 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
可以安全地忽略此警告.由于.Net将在64位机器上运行时加载正确的64位组件.微软仍然可以为这个问题提供可靠的答案.浪费警告是不必要的时间.
我们遇到了同样的问题,最终得到了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>