В Visual Studio 2010, почему.NETFramework, Version=v4.0. Файл AssemblyAttributes.cpp создал, и я могу отключить это?

Я недавно обновил до Visual Studio 2010. Теперь, когда я разрабатываю проекты, я получаю строку, которая читает:

1>  .NETFramework,Version=v4.0.AssemblyAttributes.cpp

Я узнал, что это - результат нового механизма сборки, msbuild.exe, но этот файл на самом деле автосоздается и помещается в мой локальный временный каталог (c:\Documents and Settings\me\Local Settings\Temp). Кто-либо знает, почему этот файл создается, и могу ли я запретить его создание?

BTW, это, кажется, не имеет ничего полезного в нем по моему мнению. Посмотрите ниже:

#using 
[assembly: System::Runtime::Versioning::TargetFrameworkAttribute(L".NETFramework,Version=v4.0", FrameworkDisplayName=L".NET Framework 4")];

И иногда, как http://social.msdn.microsoft.com/Forums/en-US/vcgeneral/thread/15d65667-ac47-4234-9285-32a2cb397e32, о котором сообщают, это вызывает проблемы. Таким образом, любая информация об этом файле, и как я могу избежать его автосоздания, очень ценилась бы.Спасибо!

21
задан Michael Repucci 23 June 2010 в 18:17
поделиться

3 ответа

Это характерно для всех языков (C#, VB и F# тоже имеют нечто подобное).

Один из способов отключить это - переопределить цель GenerateTargetFrameworkMonikerAttribute следующим образом:

<!-- somewhere after the Import of Microsoft.somelanguage.targets -->
<Target Name="GenerateTargetFrameworkMonikerAttribute" />

в вашем файле проекта.

17
ответ дан 29 November 2019 в 20:47
поделиться

Взгляните на c: \ program files \ msbuild \ microsoft.cpp \ v4.0 \ microsoft.buildsteps.targets. Он содержит цель GenerateTargetFrameworkMonikerAttribute, которая генерирует файл. Элемент Condition определяет, когда он запускается, GenerateTargetFrameworkAttribute является значением. Это всегда будет так, если в настройках проекта требуется сборка / clr. Комментарий в цели очень вводит в заблуждение, шумиха по поводу предварительно скомпилированных файлов заголовков не имеет ничего общего с целью цели.

Атрибут [TargetFrameworkAttribute], который он генерирует во вспомогательном файле .cpp, важен, так как он сообщает CLR на машине, на которой выполняется программа, какая минимальная версия .NET должна присутствовать для успешного выполнения программы. Его основное использование - автоматический запуск установщика для необходимой версии .NET, очень приятная функция.

LNK4221 распространен и не имеет зубов, вы можете игнорировать его. К сожалению, компоновщик не предоставляет документированного способа подавления предупреждений, основная проблема заключается в том, что он не может быть достаточно конкретным, чтобы подавить только это. Подавление вспомогательного .cpp потребует редактирования файла .targets и нарушит функцию автоматической установки, я не могу этого рекомендовать.

12
ответ дан 29 November 2019 в 20:47
поделиться

Файл предназначен для встраивания атрибута сборки TargetFrameworkMoniker .NET. Это должно (в будущем) помочь хостам правильно работать с соответствующей CLR. (Извините за неясность, я не помню, чтобы кто-то еще был экспертом). Т.е. ', на самом деле этому есть причина: -)

Я не знаю, почему есть предупреждение - изучаю его.

Dan / MSBuild

1
ответ дан 29 November 2019 в 20:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: