我们正在使用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
答案 0 :(得分:27)
这是一种解决方法:
使用与您尝试构建的平台(或位数)匹配的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... -->
答案 1 :(得分:10)
These warnings are shown in the projects that contain localization satellite assemblies(.resx files) in the solution.
This is the bug from Microsoft side and as of Aug 2017, Microsoft still hasn't fixed it.
Here's the quote from the MS feedback page:
It is resulting from a logic bug in the .NET framework binary alink.dll. But given the limited impact of this issue and the fact that this tool has a very high bar for servicing we will not be making a change to address this issue.
Regards,
Ed Maurer Development Lead, VB & C# Compilers
答案 2 :(得分:8)
可以安全地忽略此警告。由于.Net将在64位机器上运行时加载正确的64位组件。微软仍然可以为这个问题提供可靠的答案。浪费警告是不必要的时间。
答案 3 :(得分:7)
虽然@ jero2rome引用的bug已关闭,因为未修复,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
答案 4 :(得分:5)
我们遇到了同样的问题,并最终得到了Matt Smith的解决方法(https://stackoverflow.com/a/41945190/3506760),并进行了一项修改,使其有效。
由于MsBuild(https://stackoverflow.com/a/1367309/3506760)中的功能/错误,我们需要修改步骤1中描述的目标文件。
A R N D C Q E G H I L K M F P S T W Y V
1 T -3 -4 -3 -4 -4 -3 -4 -4 -5 -3 -4 -3 -3 -5 -4 -1 8 -5 -4 -3
2 I -4 -5 -6 -6 -4 -5 -6 -6 -6 7 0 -5 0 -2 -5 -5 -3 -5 -4 2
3 G -1 -4 -2 -3 -4 -4 -4 7 -4 -6 -6 -3 -5 -5 -4 2 -2 -5 -5 -5
4 M -3 -4 -5 -6 -4 -2 -5 -6 -4 2 1 -4 10 -3 -5 -4 -2 -4 -4 0
5 V 0 -4 -5 -5 -3 -4 -4 -5 -5 5 2 -4 0 -2 -4 -3 -2 -4 -3 4
6 V 4 -4 -4 -4 3 -3 -3 -2 -4 0 -2 -3 -2 -3 -3 -1 -1 -5 -3 4
7 I -3 -4 -5 -5 -3 -4 -5 -6 -5 6 3 -4 2 -1 -5 -4 -3 -4 -3 2
8 H -3 -4 0 7 -6 -2 -1 1 5 -6 -6 -3 -5 -5 -4 -2 -3 -6 -4 -5
9 K 2 0 -1 -1 -3 1 1 -1 -1 -3 -2 3 -2 -3 -1 1 0 -3 -2 -1
答案 5 :(得分:3)
除了Matt的回答(我没有足够的声誉来发表评论):我相信
文件末尾附近
在行后:
embed-responsive embed-responsive-1by1
我已经测试过,并且如果以上代码行在 $ TargetFrameworkSDKToolsDirectory 的(重新)定义之前,那么AL1073警告就消失了。否则它将持续存在。
答案 6 :(得分:2)
这是我的解决方案:
app:border_color="@color/colorPrimaryDark"
app:border_width="2dp"
app:border="true"
在 .csproj 的末尾添加这些行。
答案 7 :(得分:0)
就我而言,从 Properties/AssemblyInfo.cs
中删除所有属性或删除整个文件修复警告,但这对于大多数库来说可能不是合适的解决方案。
Net461,SDK 样式的项目,<GenerateAssemblyInfo>
设置为 false。
答案 8 :(得分:-3)
要忽略该警告,您可以为所有与VS2013兼容的OS_x86_x64安装.Net Framework 4.5.2开发人员包。 http://www.microsoft.com/en-us/download/details.aspx?id=42637