2015-10-16 8 views
8

sto ottenendo un errore di analisi del codice sul mio server di build l'errore èCS8019 Errore AssemblyInfo su file temporaneo MSBuild Server

... NETFramework, Version = v4.6.AssemblyAttributes.cs (3,1): errore CS8019: non necessario utilizzando la direttiva.

Questo è in un file Temp creato da Visual Studio.

Nel mio progetto ho selezionato "Suppress results from generated code (managed only)". Avrei pensato che sarebbe stato abbastanza

Ma ho ancora l'errore sul server e localmente non ne ho.

Qualche idea?

+0

C'è un problema di Roslyn per https://github.com/dotnet/roslyn/issues/5162 –

risposta

5

Googling per CS8019 AssemblyAttributes ha prodotto molti articoli interessanti, come ad esempio this blog post. Citando:

Fortunatamente per noi, MSBuild è abbastanza flessibile in modo che possiamo aggirarlo. Il buon design è di generare questo file nella directory Intermediate (di solito chiamato obj), perché questo è dove dovrebbero andare tutti i file temporanei e temporanei durante un processo di compilazione. Possiamo o impostare questa proprietà nel nostro file di progetto:

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

O se la build utilizza un file .props comuni, impostare questa proprietà lì. Ciò assicurerà che la tua build non dipenda dalla directory TEMP e sia più isolata, ripetibile e incrementale.

2

La risposta di Michal aiuta solo parzialmente qui. Sì, è possibile reindirizzare il punto in cui è stato scritto quel file, ma viola comunque la regola CS8019.

Sono disponibili due opzioni:

  1. impostare anche la proprietà <TargetFrameworkMonikerAssemblyAttributeText> a qualcosa che non violi la regola. Ad esempio:

    // &lt;autogenerated /&gt; 
    [assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(&quot;$(TargetFrameworkMoniker)&quot;, FrameworkDisplayName = &quot;$(TargetFrameworkMonikerDisplayName)&quot;)] 
    
  2. Oppure reindirizzare il file in un luogo non temporaneo. Nel mio caso ho scelto di scriverlo nella root della soluzione in modo che tutti i progetti condividessero il file. Ho quindi modificato manualmente il file per rimuovere le violazioni e ho eseguito il commit del file insieme al resto del mio codice. Il file non viene sovrascritto se esiste già, quindi questo sarà generalmente sicuro.

+0

Poiché nessuno di questi ha soppresso gli avvertimenti, viene fornita un'altra soluzione. –

6
  1. impostando la proprietà TargetFrameworkMonikerAssemblyAttributesPath solo non rimuove l'avviso. Riposiziona il file che genera l'avviso, che si rivelerà utile.
  2. L'impostazione della proprietà TargetFrameworkMonikerAssemblyAttributeText non funziona. Sembra che questa proprietà venga sovrascritta dalla destinazione che genera questo file. (In MSBuild 14.0, la proprietà viene sovrascritta dall'obiettivo _SetTargetFrameworkMonikerAttribute nel file Microsoft.CSharp.CurrentVersion.targets e viene successivamente indicata nella destinazione GenerateTargetFrameworkMonikerAttribute nel file Microsoft.Common.CurrentVersion.targets.)
  3. (soluzione di lavoro) Impostazione del TargetFrameworkMonikerAssemblyAttributesFileClean false impedirà il file venga sovrascritto se esiste già. È quindi possibile consentire allo script di generazione di generarlo, correggere manualmente le linee using ...;, salvarlo e verificare che non venga rigenerato durante la ricostruzione. A questo punto, posizionare il file in un percorso non temporaneo ha senso.

    aggiungi queste righe a un file diSharedBuildScript.msbuild.xml e facendo riferimento a quella all'interno dei singoli file di progetto assicura che tutti si riferiscono allo stesso file singolo:

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