2015-10-16 3 views
8

Я получаю ошибку анализа кода на моем сервере сборки ошибкаCS8019 Ошибка на AssemblyInfo на временный файл MSBuild сервер

... NetFramework, Version = v4.6.AssemblyAttributes.cs (3,1): ошибка CS8019: Ненужное использование директивы.

Это файл Temp, который создает Visual Studio.

В моем проекте у меня есть «Suppress results from generated code (managed only)». Я бы подумал, что этого будет достаточно.

Но я все еще получаю сообщение об ошибке на сервере и локально не получаю.

Любые идеи?

+0

Там есть вопрос Рослин для это https://github.com/dotnet/roslyn/issues/5162 –

ответ

5

Результаты поиска для CS8019 AssemblyAttributes дал много интересных статей, таких как this blog post. Цитата:

К счастью для нас, MSBuild достаточно гибкий, поэтому мы можем обойти его. Хороший дизайн состоит в том, чтобы сгенерировать этот файл в каталог Intermediate (обычно называемый obj), потому что в этом случае все временные и временные файлы должны идти во время процесса сборки. Мы можем либо установить это свойство в нашем файле проект:

<PropertyGroup> 
    <TargetFrameworkMonikerAssemblyAttributesPath>$([System.IO.Path]::Combine('$(IntermediateOutputPath)','$(TargetFrameworkMoniker).AssemblyAttributes$(DefaultLanguageSourceExtension)'))</TargetFrameworkMonikerAssemblyAttributesPath> 
</PropertyGroup> 

Или, если ваш билд использует файл общего .props установить свойство там. Это гарантирует, что ваша сборка не зависит от каталога TEMP и является более изолированной, повторяемой и инкрементальной.

2

Ответ Михала частично помогает здесь. Да, вы можете перенаправить, где этот файл написан, но он все равно будет нарушать правило CS8019.

У вас есть два варианта:

  1. Также установлено свойство <TargetFrameworkMonikerAssemblyAttributeText> к чему-то, что не нарушает правила. Например:

    // &lt;autogenerated /&gt; 
    [assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(&quot;$(TargetFrameworkMoniker)&quot;, FrameworkDisplayName = &quot;$(TargetFrameworkMonikerDisplayName)&quot;)] 
    
  2. Или перенаправить файл в некое временное место. В моем случае я решил записать его в корень решения, поэтому все проекты будут делиться файлом. Затем я вручную отредактировал файл, чтобы удалить нарушения, и передал файл вместе с остальной частью моего кода. Файл не перезаписывается, если он уже существует, поэтому это будет в целом безопасным.

+0

Поскольку ни одно из них не подавляет предупреждения, предоставляется другое решение. –

6
  1. Только установка TargetFrameworkMonikerAssemblyAttributesPath свойство не снимает предупреждение. Он перемещает файл, который генерирует предупреждение, которое окажется полезным.
  2. Установка свойства TargetFrameworkMonikerAssemblyAttributeText не работает. Похоже, это свойство перезаписывается целью, которая генерирует этот файл. (В MSBuild 14.0 свойство переписывается целевым _SetTargetFrameworkMonikerAttribute в файл Microsoft.CSharp.CurrentVersion.targets и позже упоминается в целевом GenerateTargetFrameworkMonikerAttribute в файле Microsoft.Common.CurrentVersion.targets.)
  3. (рабочий раствор) Установка TargetFrameworkMonikerAssemblyAttributesFileClean ложь предотвратит файл от перезаписи, если он уже существует. Таким образом, вы можете создать скрипт сборки, исправить строки using ...; вручную, сохранить его и увидеть, что он не восстанавливается при перестройке. На этом этапе размещение файла в невременном пути имеет смысл.

    Добавление следующих к SharedBuildScript.msbuild.xml файл и, ссылаясь на что в отдельных файлах проекта гарантирует, что все они относятся к одной и той же гуськом:

    <PropertyGroup> 
        <TargetFrameworkMonikerAssemblyAttributesFileClean>False</TargetFrameworkMonikerAssemblyAttributesFileClean> 
        <TargetFrameworkMonikerAssemblyAttributesPath>$(MSBuildThisFileDirectory)SharedAssemblyAttributes.cs</TargetFrameworkMonikerAssemblyAttributesPath> 
    </PropertyGroup>