Подтвердить что ты не робот

ALINK: предупреждение AL1073: ссылочная сборка "mscorlib.dll" нацелена на другой процессор

Мы используем 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
4b9b3361

Ответ 1

В то время как ошибка, на которую ссылается @jero2rome, закрывается как "Не исправлять", VS2015 RC с .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

Ответ 2

Это предупреждение можно безопасно игнорировать. Поскольку .Net будет загружать правильные 64-битные сборки во время выполнения на 64-битной машине. Тем не менее Microsoft может дать твердый ответ на эту проблему. Это было ненужное предупреждение о времени.

Ответ 3

Вот обходной путь:

Эту проблему можно избежать, используя AL.EXE, которая соответствует платформе (или битте), которую вы пытаетесь построить. То есть вы увидите, что когда вы строите x64, он пытается использовать AL.EXE по пути, подобному

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

Если вы можете использовать эту версию AL.exe для x64, проблема исчезнет. То есть, используйте 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... -->
    

Ответ 4

Эти предупреждения отображаются в проектах, содержащих локальные сборки сборок (. resx файлы) в решении.

Это ошибка со стороны Microsoft, и по состоянию на август 2017 Microsoft все еще не исправила ее.

Здесь цитата из страницы MS feedback:

Это связано с логической ошибкой в ​​двоичном формате .NET framework alink.dll. Но с учетом ограниченного воздействия этой проблемы и факта что этот инструмент имеет очень высокий бар для обслуживания, мы не будем делать изменение для решения этой проблемы.

Привет,

Редактор разработки Ed Maurer, компиляторы VB и С#

Ответ 5

У нас была одна и та же проблема, и в итоге с помощью Мэтта Смита (fooobar.com/questions/311464/...) была внесена одна модификация, благодаря которой она работала.

Из-за функции/ошибки в MsBuild (fooobar.com/questions/311466/...) нам нужно было изменить файл целей, описанный в шаге 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>

Ответ 6

Чтобы игнорировать это предупреждение, вы можете установить пакет разработчика .Net Framework 4.5.2 для всех OS_x86_x64, который совместим с VS2013. http://www.microsoft.com/en-us/download/details.aspx?id=42637