Mamy pozornie wspólny błądskompilować NET 4.0 projekt na serwerze kompilacji z .net 4.5
Could not load type 'System.Runtime.CompilerServices.ExtensionAttribute' from assembly 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
w projekcie, który musi zostać skompilowany z .NET 4.0, ale jest zbudowany na uruchomionym serwerze kompilacji Windows Server 2012 (z .Net 4.5). Projekt jest aplikacją internetową, która zostanie wdrożona na serwerze sieciowym z 2003 r., Gdzie instalacja .Net 4.5 nie jest opcją. Nie działa przeciw "klasycznej" .Net 4.0
Z podobnymi pytaniami, próbujemy opcji wiersza polecenia do MSBuild:
/property:FrameworkPathOverride="C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0"
Próbowaliśmy także różne kombinacje
/property:ReferencePath="C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0"
/property:NoStdLib=true
/property:NoCompilerStandardLib=true
The zespoły referencyjne (w tym pliki .dll) są faktycznie instalowane w tym miejscu na serwerze kompilacji. Ale kiedy wdrażamy witrynę i odwiedzamy stronę główną, otrzymujemy ten błąd. (Co ciekawe, po ponownym wczytaniu strony błąd zniknie, a strona działa normalnie.) Jakie parametry MSBuild są potrzebne do kompilacji z zestawami .Net 4.0?
Aktualizacja Włączyłem rejestrowania niedorzeczne szczebla na MSBuild, i widzę, że widocznie jest budowanie przeciwko .NET 4.0 zespołów odniesienia:
Resolved file path is "C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\mscorlib.dll
i nie widzę żadnej wzmianki złożeń poza tym folderem lub katalogiem roboczym serwera kompilacji. Wygląda więc na to, że kompiluje się prawidłowo, ale po wdrożeniu na serwerze sieciowym zgłasza wyjątek.
Co do wyjątku odchodzącego po ponownym wczytaniu strony, zastanawiam się, czy jest to związane z etapem wstępnej kompilacji znaczników. Używamy aspnet_compile na serwerze kompilacji. Być może, jeśli wystąpi wyjątek pochodzący z wygenerowanego zespołu, serwer internetowy go skompiluje. A zrekompilowany zespół jest w porządku, ponieważ został stworzony z prawdziwym .Net 4.0.
Czy używasz ILMerge? –
Nie używamy ILMerge. –
Zmień nazwę C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ mscorlib.dll na tym serwerze kompilacji i wykonaj czystą kompilację. Znajdziesz projekt, który używa niewłaściwych zestawów referencyjnych. –