MSBUILD/csc:Самый чистый способ обработки предупреждения x64 mscorlib 1607
Вопрос
Я пытаюсь использовать систему проектов VS08SP1 по умолчанию для вызова компиляции C# в явном режиме x64 (в отличие от AnyCpu
).Когда я явно отмечаю модуль как x64, я получаю:
предупреждение CS1607:Генерация сборки. Ссылочная сборка «mscorlib.dll» предназначена для другого процессора.
Один из способов удаления этого — с помощью /nowarn:1607
. На основе моего исследования, На практике проблем с этим не возникает.Если кто-то может рассказать о реальной проблеме, с которой он столкнулся, пожалуйста, не стесняйтесь ответить.
Однако это кажется неправильным!Итак, другой подход, который я использовал, заключался в том, чтобы сделать /nostdlib+
, а затем добавьте <Reference>
с жестко запрограммированным <HintPath>
к явно 64-битной mscorlib:
<Reference Include="mscorlib">
<HintPath>$(windir)\Microsoft.NET\Framework64\v2.0.50727\mscorlib.dll</HintPath>
</Reference>
Это работает и, вероятно, лучше (если только кто-то не захочет указать на причины, по которым предыдущий подход лучше), но может ли кто-нибудь подтвердить, что это уместно, надеюсь, сославшись на что-нибудь авторитетное?
Решение
Я обнаружил, что изменив целевую платформу моего проекта на .NET Framework 4, предупреждение исчезло.
Другие советы
В этом блоге Я нашел предложение, которое слишком длинное, чтобы полностью скопировать его сюда, но вкратце идею можно описать с помощью краткого описания, адаптированного из этот комментарий:
В файле проекта вы можете определить пользовательскую переменную в Группа свойств раздел для каждой конфигурации сборки.Пример:
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
<MyCustomPath>C:\Windows\Microsoft.NET\Framework64</MyCustomPath>
</PropertyGroup>
Просто добавьте тег, например
<Reference Include="System.Data">
<HintPath>$(MyCustomPath)</HintPath>
</Reference>
а затем используйте макрос, чтобы определить ссылочный путь.Вы можете определить МойCustomPath в другое место для разных конфигураций сборки (платформа и/или отладка/выпуск).
Проблемы не существовало бы, если бы MS поддерживала это в пользовательском интерфейсе VS, но до тех пор это будет работать.Я использую этот метод для ссылки на разные версии одних и тех же сборок в своих сборках отладки и выпуска.Прекрасно работает!
В приведенном выше чтении я восстановил тег, который был потерян в комментарии к источнику, и изменил формулировку, сделав ее более подробной.
Еще один интересный фрагмент из тот же блог:
Есть и другие способы сделать это, но они также требуют ручного редактирования файлов проекта.Один из способов — указать условия для разделов PropertyGroup.Этот Переполнение стека Вопрос подчеркивает использование условий.
Я считаю, что ваш второй вариант (явная ссылка с /nostdlib+
) лучше, поскольку оно не будет подавлять это предупреждение, если вы будете ссылаться на другие сборки, не созданные на той же платформе.
В моем случае это предупреждение появилось, потому что в моем решении использовалась смесь проектов x86 и x64.Если я создаю конфигурации сборки x86 во всех своих проектах и нацеливаю их на сборку, предупреждения исчезают.Однако, если бы я вообще хотел ориентироваться на x64, я считаю, что мне пришлось бы пересобрать проект (или следовать советам выше), чтобы переработать его для платформы x64.