jer*_*ome 28 .net c# msbuild visual-studio-2010 visual-studio-2013
我们正在使用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
Run Code Online (Sandbox Code Playgroud)
Mat*_*ith 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文件(名称无关紧要)并将其添加到项目中.它具有以下内容:
<?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>
Run Code Online (Sandbox Code Playgroud)编辑.csproj文件以在文件末尾附近导入此文件(您将在其中看到"修改构建过程..."的注释:
<Import Project="MsBuildAL1073WarningWorkaround.targets" />
<!-- To modify your build process... -->
Run Code Online (Sandbox Code Playgroud)可以安全地忽略此警告.由于.Net将在64位机器上运行时加载正确的64位组件.微软仍然可以为这个问题提供可靠的答案.浪费警告是不必要的时间.
虽然@ 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]
Run Code Online (Sandbox Code Playgroud)
使用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
Run Code Online (Sandbox Code Playgroud)
我们遇到了同样的问题,最终得到了Matt Smith的解决方法(/sf/answers/2936163331/),其中一项修改使其成功.
由于MsBuild中的功能/错误(/sf/answers/95711661/),我们需要修改步骤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>
Run Code Online (Sandbox Code Playgroud)
只是对马特的回答进行一些补充(我没有足够的声誉来添加评论):我相信
靠近文件末尾
就在该行之后:
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
Run Code Online (Sandbox Code Playgroud)
我已经测试过,如果上面的行位于$TargetFrameworkSDKToolsDirectory的(重新)定义之前,则 AL1073 警告消失。否则它会持续存在。
| 归档时间: |
|
| 查看次数: |
19680 次 |
| 最近记录: |