I've been asked to migrate a VB.NET solution from Windows Server 2003, Visual Studio 2005, 32 bit, .NET 2.0 to Windows Server 2008, Visual Studio 2008, 64 bit, .NET 4.0. I have the solution compiling and working fine in Visual Studio. the next step is getting the Nant script to work so it'll checkout, compile and test like it did before.
However, when the Nant script gets to the msbuild step, it's failing immediately with "...Microsoft.NET/Framework64/v4.0.30319/msbuild failed to start. Access is denied"
I've tried running msbuild directly with the same inputs and it gets past this point. My question is: is there something I can put in my nant .build to get it to run it's tasks as an administrator?
My .build file:
<?xml version="1.0"?>
...
<credential domain="xxxx" username="xxxxx" password="xxxxxx" id="55" />
<property name="debug" value="true" overwrite="false" />
<property name="configuration" value="debug" overwrite="false" />
<property name="solution.file" value="solution.sln" overwrite="false" />
...
<target name="msbuild" description="Build the whole solution">
<exec program="C:/Windows/Microsoft.NET/Framework64/v4.0.30319/msbuild" workingdir="D:/BuildTest" commandline='"${solution.file}" /v:q /nologo /p:Configuration=${configuration}' />
</target>
...
I have the same problem on a 32-bit machine. A workaround for me is to use nantcontrib's msbuild task instead. Anyone understands why this works?
On a 64-bit computer the exec-method works as well. I have to point to msbuild.exe in the correct Framework folder.
<target name="compile" description="Compiles the .Net solution">
<!-- this works -->
<msbuild project="${src.root.dir}\${src.solution}"
verbosity="Normal">
<arg value="/p:Configuration=${msbuild.configuration}" />
<arg value="/p:Platform=Any CPU" />
<arg value="/t:Rebuild" />
<arg value="/nologo" />
</msbuild>
<!-- access is denied -->
<exec program="${msbuild.path}"
workingdir="${src.root.dir}"
basedir="${src.root.dir}"
commandline="${src.root.dir}\${src.solution}${src.solution}"
failonerror="true" >
<arg value="/p:Platform=Any CPU" />
<arg value="/p:Configuration=${msbuild.configuration}" />
<arg value="/t:Rebuild" />
<arg value="/v:${msbuild.verbosity}" />
</exec>
</target>