Скрипт Nant не может порождать msbuild - PullRequest
2 голосов
/ 03 ноября 2011

Меня попросили перенести решение 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>
...

Ответы [ 2 ]

2 голосов
/ 23 мая 2013

Или

Вы можете поставить ".exe" в конец, если строка msbuild

<exec program="C:\Windows\Microsoft.NET\Framework64\v4.0.30319\msbuild.exe">
1 голос
/ 08 ноября 2011

У меня такая же проблема на 32-битной машине. Обходной путь для меня - использовать вместо этого задачу msbuild от nantcontrib Кто-нибудь понимает, почему это работает?

На 64-битном компьютере также работает exec-метод. Я должен указать на msbuild.exe в правильной папке Framework.

<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>
...