2015-10-16 3 views
8

Ich bin eine Code-Analyse Fehler auf meinem Build-Server immer der FehlerCS8019 Fehler auf Assembly auf temporäre Datei MSBuild Server

... NETFramework, Version = v4.6.AssemblyAttributes.cs (3,1): Fehler CS8019: Unnötige Verwendung der Direktive.

Dies ist in einer Temp-Datei, die Visual Studio erstellt.

In meinem Projekt habe ich "Suppress results from generated code (managed only)" angekreuzt. Ich hätte gedacht, das wäre genug.

Aber ich bekomme immer noch den Fehler auf dem Server und lokal bekomme ich keine.

Irgendwelche Ideen?

+0

Es gibt eine Roslyn Problem für Diese https://github.com/dotnet/roslyn/issues/5162 –

Antwort

5

Googeln für CS8019 AssemblyAttributes ergab viele interessante Artikel, wie this blog post. Zitieren:

Zum Glück für uns ist MSBuild flexibel genug, so dass wir es umgehen können. Das gute Design besteht darin, diese Datei in das Intermediate-Verzeichnis (normalerweise Obj genannt) zu schreiben, da alle transienten und temporären Dateien während eines Build-Prozesses dorthin gehen sollten. Wir können entweder diese Eigenschaft in unserer Projektdatei gesetzt:

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

Oder wenn Ihr Build verwendet eine gemeinsame .props Datei, diese Eigenschaft dort eingestellt. Dadurch wird sichergestellt, dass Ihr Build nicht vom TEMP-Verzeichnis abhängt und isolierter, wiederholbarer und inkrementeller ist.

2

Michals Antwort hilft hier nur teilweise. Ja, Sie können umleiten, wo diese Datei geschrieben ist, aber trotzdem die CS8019 Regel verletzen.

Sie haben zwei Möglichkeiten:

  1. Auch die <TargetFrameworkMonikerAssemblyAttributeText> Eigenschaft auf etwas festgelegt, die nicht die Regel verstößt. Zum Beispiel:

    // &lt;autogenerated /&gt; 
    [assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(&quot;$(TargetFrameworkMoniker)&quot;, FrameworkDisplayName = &quot;$(TargetFrameworkMonikerDisplayName)&quot;)] 
    
  2. Oder, umleiten Sie die Datei an einen Ort nicht vorübergehend. In meinem Fall entschied ich mich, es in den Lösungsstamm zu schreiben, so dass alle Projekte die Datei gemeinsam nutzen würden. Ich habe dann die Datei manuell bearbeitet, um die Verstöße zu entfernen und die Datei zusammen mit dem Rest meines Codes zu übertragen. Die Datei wird nicht überschrieben, wenn sie bereits existiert, daher ist dies im Allgemeinen sicher.

+0

Da keiner von diesen die Warnungen unterdrückt, wird eine andere Lösung bereitgestellt. –

6
  1. Nur die TargetFrameworkMonikerAssemblyAttributesPath-Eigenschaft die Warnung nicht entfernen. Es verschiebt die Datei, die die Warnung generiert, was sich als nützlich erweisen wird.
  2. Das Festlegen der TargetFrameworkMonikerAssemblyAttributeText-Eigenschaft funktioniert nicht. Es scheint, dass diese Eigenschaft vom Ziel überschrieben wird, das diese Datei generiert. (In MSBuild 14.0 wird die Eigenschaft in der Datei Microsoft.CSharp.CurrentVersion.targets durch das Ziel _SetTargetFrameworkMonikerAttribute überschrieben und später in der Datei Microsoft.Common.CurrentVersion.targets auf das Ziel GenerateTargetFrameworkMonikerAttribute verwiesen.)
  3. (Arbeitslösung) Einstellen der TargetFrameworkMonikerAssemblyAttributesFileClean auf false wird die Datei nicht überschrieben werden, wenn sie bereits vorhanden ist. Sie können also das Build-Skript generieren lassen, die using ...; Zeilen manuell korrigieren, speichern und sehen, dass es beim Neuaufbau nicht neu generiert wird. An diesem Punkt ist das Platzieren der Datei in einem nicht temporären Pfad sinnvoll.

    Hinzufügen der folgenden zu einer SharedBuildScript.msbuild.xml Datei und unter Bezugnahme auf die in den einzelnen Projektdateien stellt sicher, dass sie alle auf die gleiche einzelne Datei verweisen:

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