Вопрос

У меня есть два вопроса по поводу:visual Studio 2008 и события после сборки.

1) Как мне динамически перечислить msbuild.exe полный путь, который будет вызван событием после сборки?В настоящее время у меня есть следующее (которое прекрасно работает, кстати):-

C:\Windows\Microsoft.NET\Framework64\v3.5\msbuild.exe 
    "$(ProjectDir)MSBuild\MSBuildSettings.xml"

..но это сработало бы только в том случае, если у вас 64-разрядная среда.Есть ли способ использовать какую-нибудь встроенную магическую настройку?например. $(MsBuildPath)msbuild.exe "blah....xml" ??

2) Моя задача msbuild выполняет некоторые действия, а затем генерирует текстовый файл в качестве выходных данных.Я определяю выходной путь в XML-файле msbuild как таковой..

<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/MsBuild/2003">
    <UsingTask TaskName="CustomTask" AssemblyFile="MyAssembly.dll"/>
    <Target>
        <CustomTask
           ...
           OutputFile="Foo.txt"
        />
    <Target>
</Project>

Как я могу передать реальную выходную папку в файл msbuild?Я пытался...

OutputFile="$(OutDir)Foo.txt"

но это не удалось :(

Ваше здоровье!

Обновление # 1 - Ответ на второй вопрос..

Я нашел способ ответить на второй вопрос , хотя и не уверен , что это лучший ..так что я открыт для других идей :)

Изменения в XML-файле ::добавьте группу свойств, которая задает имя внутренней переменной, если внешние аргументы не были переданы исполняемому файлу msbuild.exe .

    <PropertyGroup>
        <OutputFile Condition=" '$(OutputFile)'=='' ">
            ..\SomeFolder\Foo.txt</OutputFile>
    </PropertyGroup>

    <Target>
        <CustomTask
           ...
           OutputFile="$(OutputFile)"
        />
    <Target>
</Project>

Теперь вызовите исполняемый файл msbuild следующим образом ...

msbuild.exe "C:\Temp Foo\Blah\MsbuildSettings" /p:OutputFile="C:\Folder 1\Folder 2\blah\"

и это работает :)

Это было полезно?

Решение

Для вопроса 1 используйте свойство Путь msbuildbinpath

Для вопроса 2 используйте свойство Выходной путь (Проекты на C # или VB)

OutputFile="$(OutputPath)Foo.txt"

Другие советы

Вы могли бы поместить свою пользовательскую задачу внутрь vbproj (csproj файл если это проект c #) файл, а затем в событии после сборки используйте переменные MSBuild, определенные VS.Я думаю об этом процессе навскидку, так что потерпи меня в этом, лол.

  1. В Visual Studio выгрузите проект, с которым вы хотите провести событие после сборки, а затем щелкните правой кнопкой мыши на узле выгруженного проекта и выберите "Редактировать ...".
  2. Положите Использующаязадача наверху, точно так же, как то, что у вас есть.
  3. Перезагрузите проект, откройте свойства проекта и перейдите к редактированию события после сборки там.
  4. Теперь вы должны иметь доступ ко всем этим замечательным переменным и добавлять их в свою пользовательскую задачу.

Файлы проекта сами по себе являются скриптами MSBuild, что позволяет вам выполнять всевозможные изящные скриптовые трюки MSBuild.

Редактировать:Извините, у меня нет ответа на первый вопрос, который вы задали.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top