ALINK: avertissement AL1073: assembly Référencé 'mscorlib.dll " cible un autre processeur
nous utilisons VS2013 et .net 4.5.1(récemment migré, mais cette erreur est là à partir de .Net 4.0) . Cette erreur ne se produit que lors de la compilation du projet dans la plate-forme cible x64. Est-ce vraiment une erreur qui va casser lors de l'exécution? Pourquoi MSBUILD ne résout pas ce problème.dll correctement ? Cela se produit seulement dans les projets qui ont été créés dans VS2010 et ne se produit pas dans les projets nouvellement créés. Ce qui me manque ici. Toutes mes assemblées de tiers sont en x64bit.
dans TeamCity build serveur, j'obtiens l'erreur suivante:
GenerateSatelliteAssemblies
[17:01:18]AL
[17:01:18]C:Program Files (x86)Microsoft SDKsWindowsv8.1AbinNETFX 4.5.1 ToolsAL.exe /culture:de /keyfile:....MyApp.snk /out:objx64ReleasedeMyApp.Hardware.Softing.resources.dll /platform:x64 /template:objx64ReleaseMyApp.Hardware.Softing.dll /embed:objx64ReleaseMyApp.Hardware.Softing.Properties.Resources.de.resources
[17:01:18]ALINK warning AL1073: Referenced assembly 'mscorlib.dll' targets a different processor
7 réponses
alors que le bug référencé par @jero2rome est fermé comme ne sera pas corrigé, VS2015 RC w/ .NET 4.6 n'émet plus cet avertissement:
à Partir de VS2013/.NET 4.5.1, je vois le même problème:
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]
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
Voici une solution de contournement:
on peut éviter le problème en utilisant L'IA.EXE qui correspond à la plateforme (ou bitness) que vous tentez de construire. Qui est, vous verrez que lorsque vous construisez x64, qu'il est tentant d'utiliser COLL.EXE à un chemin similaire à
C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6 Tools
Si vous pouvez l'obtenir à utiliser la version x64 de AL.exe, le problème va disparaître. Qui est, l'utilisation de l'AL.EXE à un chemin similaire à:
C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6 Tools\x64
Msbuild trouve ceci chemin à l'aide de ses TargetFrameworkSDKToolsDirectory
. Ainsi, en partant de l'hypothèse que ce répertoire est le répertoire correct lors de la construction de x86, la solution de contournement ci-dessous ajoute essentiellement le sous-répertoire x64 sur le chemin lors de la construction de x64 et le laisse tel quel:
créer un MsBuildAL1073WarningWorkaround.les objectifs de fichier (nom n'a pas d'importance) et l'ajouter au projet. Elle a le contenu suivant:
<?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>
modifier le .fichier csproj pour importer ceci dossier près de la fin du fichier (où vous verrez le commentaire qui dit "pour modifier votre processus de construction...":
<Import Project="MsBuildAL1073WarningWorkaround.targets" /> <!-- To modify your build process... -->
Cet avertissement peut être ignoré en toute sécurité. Puisque .Net chargera les assemblages 64bit corrects à l'exécution dans une machine 64bit. Encore microsoft peut donner une réponse satisfaisante à cette question. C'était inutile de perdre du temps à prévenir.
Ces avertissements sont affichés dans les projets qui contiennent des localisation par satellite des assemblages(.resx files) dans la solution.
c'est le bug du côté de Microsoft et en août 2017, Microsoft ne l'a toujours pas corrigé.
Voici la citation de l' MS commentaires page:
il résulte d'un bug logique dans le binaire .net framework alink.DLL. Mais étant donné l'impact limité de cette question et le fait que cet outil a une barre très élevée pour l'entretien que nous ne ferons pas un changement pour régler cette question.
Cordialement,
Ed Maurer, responsable du Développement, VB ET C# Compilateurs
nous avons eu le même problème et avons fini avec la solution de contournement de Matt Smith (https://stackoverflow.com/a/41945190/3506760) avec une modification qui l'a fait fonctionner.
Due to feature / bug in MsBuild (https://stackoverflow.com/a/1367309/3506760) nous avons dû modifier le fichier cible décrit à l'étape 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>
juste un ajout à la réponse de Matt( Je n'ai pas assez de réputation pour ajouter un commentaire): je crois
près de la fin du fichier
juste après la ligne:
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
j'ai testé et si la ligne ci-dessus précède la (re)définition de $TargetFrameworkSDKToolsDirectory alors AL1073 a disparu. Sinon, elle persiste.
pour ignorer cet avertissement, vous pouvez installer .Net Framework 4.5.2 developer pack pour tout OS_x86_x64, qui est compatible avec VS2013. http://www.microsoft.com/en-us/download/details.aspx?id=42637