Stiamo facendo l'errore apparentemente comuneCompile .net progetto 4.0 sul server di build con .net 4.5
Could not load type 'System.Runtime.CompilerServices.ExtensionAttribute' from assembly 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
in un progetto che deve essere compilato contro .Net 4.0, ma è costruito su un build server in esecuzione Windows Server 2012 (con .Net 4.5). Il progetto è un'applicazione web che viene distribuita su un server Web in esecuzione nel 2003, dove l'installazione di .Net 4.5 non è un'opzione. Ci si corre contro il "classico" .Net 4.0
Da simili domande, stiamo cercando le opzioni della riga di comando per MSBuild:
/property:FrameworkPathOverride="C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0"
Abbiamo anche provato varie combinazioni di
/property:ReferencePath="C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0"
/property:NoStdLib=true
/property:NoCompilerStandardLib=true
Il gli assembly di riferimento (inclusi i file .dll) sono infatti installati in quel punto sul build server. Ma quando distribuiamo il sito Web e visitiamo la home page, riceviamo quell'errore. (È interessante notare che in una pagina di ricarica l'errore scompare e il sito funziona normalmente). Quali sono i parametri MSBuild necessari per la compilazione rispetto agli assembly .Net 4.0?
Aggiornamento ho acceso la registrazione ridicolo a livello su MSBuild, e vedo che a quanto pare si sta costruendo contro le assemblee di riferimento .Net 4.0:
Resolved file path is "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\mscorlib.dll
e non ho visto alcuna menzione di assembly esterni a quella cartella o alla directory di lavoro del build server. Quindi sembra compilare correttamente, ma quando viene distribuito sul server web, genera un'eccezione.
Per quanto riguarda l'eccezione andando su una pagina di ricarica, mi chiedo se questo è legato alla fase di pre-compilazione del markup. Stiamo eseguendo aspnet_compile sul build server. Forse se c'è un'eccezione proveniente da un assembly generato, il web server lo ricompilerà. E l'assembly ricompilato va bene, perché è stato creato con vero .Net 4.0.
Stai usando ILMerge? –
Non stiamo usando ILMerge. –
Rinominare C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ mscorlib.dll sul server di generazione e creare una build pulita. Troverete il progetto che utilizza gli assembly di riferimento errati. –