MSBuild címkéhez tartozó bejegyzések

MSB4175: The task factory "CodeTaskFactory" could not be loaded

Az alábbi hibaüzenetbe sikerült belefutnom fordítás közben:

C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v12.0\CodeAnalysis\Microsoft.CodeAnalysis.targets(214,5): error MSB4175: The task factory "CodeTaskFactory" could not be loaded from the assembly "C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Build.Tasks.v12.0.dll".

Could not load file or assembly ‘file:///C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Build.Tasks.v12.0.dll’ or one of its dependencies.

The system cannot find the file specified.

A dolog különlegessége, hogy a gépen csak VS 2013 volt, 2012 soha.

A problémát talán az okozza, hogy a 2013-as verziótól kezdve az MSBuild már nem a .NET Framework, hanem a Visual Studio része, ennek megfelelően a fájlrendszerben is máshol laknak a hozzá tartozó fájlok. A hibaüzenetből kiderült, hogy a Microsoft.Build.Tasks.v12.0.dll fájlt a rendszer a C:\Windows\Microsoft.NET\Framework64\v4.0.30319 mappában keresi, pedig nálam itt található: C:\Program Files (x86)\MSBuild\12.0\Bin. Átmásoltam, és azóta megy rendesen.

Valószínűleg nem ez a legszebb megoldás, de mivel a forráskódhoz nem lehetett hozzányúlni, és nálam megoldotta a problémát, nyugodtan alszom.

 

Technorati-címkék: ,,

Could not load file or assembly (0x80131515)

Érdekes hibába sikerült ma belefutnom a Visual Studioval: egy projekt gyönyörűen fordult Debug konfigurációban, de amikor Release-ben akartam fordítani, az alábbi hibaüzenetet kaptam:

"SGEN: Could not load file or assembly ‘file:///C:\TFS\Ize\Bize\bin\MyLibrary.dll’ or one of its dependencies. Operation is not supported. (Exception from HRESULT: 0x80131515)".

Na, mondjon nekem valami olyan okot, ami miatt egy a References listában szereplő DLL-lel ez történik, de csak Release konfigurációnál!

A leírás alapján az ember elkezdhet az sgen.exe-re gyanakodni, megpróbálhatja engedélyezni távoli betöltést a loadFromRemoteSources attribútummal, esetleg elgondolkodhat azon, hogy mi is az a Generate serialization assembly opció a projekt tulajdonságai között, és hogy vajon melyik lehet a kedvező beállítása.

Pedig a megoldás ennél sokkal egyszerűbb: Jobb klikk a fájlon, Properties, Unblock:

Unblock

Ez a gomb a háttérben a Zone.Identifier nevű streamet törli a fájlról, amit a VS egyébként észre sem vesz, sőt ha megpróbáljuk TFS-be checkinelni a változtatásokat, azt fogja mondani, hogy nincs mit. Tipikusan azon a gépen fog egyébként előjönni ez a probléma, ahova a neten talált kész library-t, például az AjaxControlToolkit.dll-t letöltöttük.

Technorati-címkék: ,

Web Deployment Projects fordítása Visual Studio nélkül

Nagyon kedvemre való az ASP.NET 2.0-ban megjelent Web Site projekt típus, elsősorban az egyszerűsége miatt. Sajnos van néhány hátránya is, amiből néhány az eltelt sok év alatt sem oldódott meg, másokra azonban van már jól használható megoldás. Ez utóbbiak közé tartozik a a projekt fordítása, azaz hogy a szerverre ne a nyers forráskódot kelljen feltennünk – és ezzel az ASP.NET runtime-ra bíznunk a fordítást – , hanem csak a lefordított DLL-eket és a kiürített ASPX fájlokat. Ezt a problémát tökéletesen megoldja a Web Deployment Projects (WDP) kiegészítés. Ezzel viszont az a bökkenő, hogy csak a nagy Visual Studiot támogatja, Visual Web Developer Expressre nem tudjuk telepíteni. Ha tehát van egy VS alatt készült projektünk, aminek a fordítását, CSS és Javascript minimalizálását, sőt az egész telepítő csomag összerakását a WDP végzi, akkor nem tudunk telepítőt gyártani az Express verzión, hiszen az nem tudja betölteni a WDP projekt típust. Szerencsére van megoldás.

Az a szerencsénk, hogy csak a dizájner támogatással van probléma, parancssorból le lehet fordítani az egész solutiont, DLL függőségekkel és WDP-vel együtt. Első lépésként tehát telepítsük fel a VWD Express mellé a WDP-et és fütyüljünk rá, hogy a kettő szóba se áll egymással. A lényeg, hogy a WDP telepítőjével az MSBuild taskok felkerültek a gépre.

A WDP projekt konfigurációjától függően valószínűleg kelleni fog még az aspnet_merge.exe, amit megtalálhatunk a nagy Visual Studios gépen vagy esetleg a Windows SDK-ban. Ezt egyszerűen másoljuk be a %ProgramFiles%\MSBuild\Microsoft\WebDeployment\v10.0 mappába.

Ha ez mind megvan, már indulhat is a teljes solution fordítása parancssorból:

"%WinDir%\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe"
  /target:Build
  /property:Configuration=Release
  MySolution.sln 
  /p:AspNetConfiguration=Release 

Fontos, hogy négyes MSBuildre van szükségünk, még akkor is, ha egyébként a projekt a 3.5-ös Framework verziót célozza meg.