Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Visual Studio 2013 calls 32 bit aspnet_compiler instead of 64 bit one

My solution contains some .net projects and one of them is a ASP.NET MVC project, which I'm trying to publish. All configurations are set correctly, x32 and x64, non of them is set to AnyCPU.

Problem:

If I try to publish the project as 32bit, everything is fine, but trying to publish in 64 bit mode fails with an error:

Could not load file or assembly "ProjectA" or one of its dependencies. 
An attempt was made to load a program with an incorrect format.

What I've tried and noticed:

Since VS 2013, MSbuild is a part of VS and not of .NET Framework as before. If I simply build the solution in x64 mode, the 32 bit msbuild "C:\Program Files (x86)\MSBuild\12.0\Bin\MSBuild.exe" is runnig first and it launches the 64bit msbuild "C:\Program Files (x86)\MSBuild\12.0\Bin\amd64\MSBuild.exe" So normal build without publish works just fine.

But, if I choose publish, the 32bit MSbuild is running first and then it launches the 32 bit aspnet_compiler c:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_compiler.exe and NOT the 64 bit one, which causes an error which I mentioned above.

The only workaround I've found until now is to replace the

"C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_compiler.exe"

with a 64 bit one

"C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_compiler.exe"

Question:

Is there any better (legal) solution for my problem? This looks like a bug in VS

like image 816
VladL Avatar asked Nov 13 '13 15:11

VladL


People also ask

How do I change my Visual Studio application from 32-bit to 64-bit?

From the BUILD menu in Visual Studio, select Configuration Manager. From the Active solution platform drop-down list, select New. The New Solution Platform dialog displays. In the Type or select new platform combination box, select x64.

Is Visual Studio 32-bit or 64-bit?

(Because Visual Studio is a 32-bit application, when it is installed on a 64-bit system, it runs under WOW64.)

How is a 64-bit version better than the 32-bit MSBuild version?

Here's why it matters. Simply put, a 64-bit processor is more capable than a 32-bit processor because it can handle more data at once. A 64-bit processor can store more computational values, including memory addresses, which means it can access over 4 billion times the physical memory of a 32-bit processor.

How do I enable 32-bit applications in IIS Express?

The 32 bit version can be found at c:\program files (x86)\IIS Express\iisexpress.exe and the 64 bit version can be found at c:\program files\IIS Express\iisexpress.exe . IIS Express ignores the enable32BitAppOnWin64 attribute. To run the app pool as 32 bit, you must execute the 32 bit version of IIS Express.


2 Answers

Add this line to the .csproj file within a PropertyGroup node for the build configuration you are targeting (or use the ProperyGroup that doesn't have a target to target all release modes).

<AspnetCompilerPath>$(windir)\Microsoft.NET\Framework64\v4.0.30319</AspnetCompilerPath>

The 64-bit version is then used by the compiler. For me, the node I added this line to was as below:

<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x64'">
   <AspnetCompilerPath>$(windir)\Microsoft.NET\Framework64\v4.0.30319</AspnetCompilerPath>
</PropertyGroup>
like image 86
simbolo Avatar answered Sep 28 '22 03:09

simbolo


I have exactly the same problem.

You can create BAT-files to replace the EXE before you start your publish. or Or you could write a BAT that calls the aspnet_compiler.exe directly and does the publish without the UI :-)

like image 20
ahorak Avatar answered Sep 28 '22 03:09

ahorak