#msbuild #nant
#msbuild #nant
Вопрос:
Меня попросили перенести VB.NET решение от Windows Server 2003, Visual Studio 2005, 32-разрядная версия, .NET 2.0 до Windows Server 2008, Visual Studio 2008, 64-разрядная версия, .NET 4.0. У меня есть решение, которое компилируется и работает нормально в Visual Studio. следующий шаг — заставить скрипт Nant работать, чтобы он выполнял проверку, компиляцию и тестирование, как это было раньше.
Однако, когда скрипт Nant переходит к шагу msbuild, он немедленно завершается с ошибкой «…Microsoft.NET/Framework64/v4.0.30319/msbuild не удалось запустить. Доступ запрещен «
Я попытался запустить msbuild напрямую с теми же входными данными, и он прошел этот момент. Мой вопрос: есть ли что-то, что я могу добавить в свой nant .build, чтобы заставить его запускать свои задачи от имени администратора?
Мой файл .build:
<?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>
...
Ответ №1:
Или
Вы могли бы поставить «.exe» в конце, если строка msbuild
<exec program="C:WindowsMicrosoft.NETFramework64v4.0.30319msbuild.exe">
Комментарии:
1. Это решение также работает при применении к ProcessStartInfo. Спасибо!
Ответ №2:
У меня такая же проблема на 32-разрядной машине. Обходным путем для меня является использование задачи msbuild от nantcontrib. Кто-нибудь понимает, почему это работает?
На 64-разрядном компьютере exec-метод также работает. Я должен указать на msbuild.exe в правильной папке Фреймворка.
<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>