2010-06-07 3 views
8

Я пытаюсь установить значение OutputPath абсолютный путь:MSBuild OutputPath собственности и абсолютные пути

<OutputPath>c:\Projects\xxx\Deployment</OutputPath> 

Но я получаю эту ошибку:

Error 17 The expression "[System.IO.Path]::GetFullPath(D:\Projects\xxx\trunk\xxx.Web.Deployment\c:\Projects\xxx\Deployment\)" cannot be evaluated. The given path's format is not supported.  1 1 xxx.Web.Deployment 

Есть ли способ, чтобы использовать абсолютный путь с свойством OutputPath? Я пытался экспериментировать со свойством BaseOutputPath:

<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Deployment|AnyCPU'"> 
    <BaseOutputPath>C:\Projects\xxx\</BaseOutputPath> 
    <OutputPath>.\Deployment</OutputPath> 
    <EnableUpdateable>true</EnableUpdateable> 
    <UseMerge>true</UseMerge> 
    <SingleAssemblyName>xxx.Web.Deployment</SingleAssemblyName> 

Но, похоже, игнорируются. Для чего используются BaseOutputPath и BaseIntermediateOutputPath?

ответ

5

Я не уверен, можно ли делать то, что вы говорите, но вы можете добавить что-то похожее на следующее:

<PropertyGroup> 
    <CentralisedBinariesFolderLocation>c:\wherever</CentralisedBinariesFolderLocation> 
</PropertyGroup> 

<Target Name="AfterBuild"> 
    <Exec Command="xcopy /Y /S /F /R &quot;$(TargetPath)&quot; &quot;$(CentralisedBinariesFolderLocation)&quot;" /> 
</Target> 

Что будет скопировать его в соответствующем месте после сборки.

+0

Думайте, что это и есть путь. У меня есть одна небольшая проблема, хотя $ (TargetPath) ничего не возвращает. Есть ли другая переменная, которую я могу использовать для получения пути развертывания? –

+0

Получил это с помощью: . Не очень элегантный, но работал в моем случае. Пожалуйста, дайте мне знать, если есть лучший способ! :) –

3

Попробуйте использовать OutDir вместо OutputPath:

<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Deployment|AnyCPU'"> 
    <OutDir>C:\Projects\xxx\$(Configuration)</OutDir> 
    <EnableUpdateable>true</EnableUpdateable> 
    <UseMerge>true</UseMerge> 
    <SingleAssemblyName>xxx.Web.Deployment</SingleAssemblyName> 
</PropertyGroup> 
+0

Я пробовал это, и он выводился на '' C: \ Projects \ xxx \ $ (Конфигурация) \ _ PublishedWebsites \ MyApp.Website''. –

0
  1. Копирование в .TARGET и DLL-файлы из директории программы установки
  2. Изменение строки в верхней, которые выглядят как < UsingTask TASKNAME = "GetProjectProperties "AssemblyFile =" ../../ ..lallal/VisualStudio/v10.0/Microsoft.Web.Publishing.Tasks.dll "/> и c * opy эти файлы .target и .dll в папку ваших поставщиков рядом с скопированный Microsoft.WebDeployment.targets-файл, который вы редактируете *. Установите Attr, AssemblyFile = "Microsoft.Web.Publishing.Tasks.dll"
  3. Добавьте строку < EnablePackageProcessLoggingAndAssert Condition = " '$ (EnablePackageProcessLoggingAndAssert)' == ''"> True </EnablePackageProcessLoggingAndAssert> в начальный PropertyGroup.
  4. Установите OutputPath так, как вы хотите, в фактическом файле/другом tagets/другом файле build-proj.
  5. Редактировать линии ~ 290 до < Состояние WebPublishPipelineProjectDirectory = " '$ (WebPublishPipelineProjectDirectory)' == ''"> $ (OutputPath) </WebPublishPipelineProjectDirectory>
0

Вместо всех шагов в ответ октября, является Невозможно просто определить WebPublishPipelineProjectDirectory по тому же пути, что и OutputPath?

Я попробовал это в своем решении CI (используя CruiseControl), и это, казалось, сработало.

Кто-нибудь знает о каких-либо побочных эффектах, которые не кажутся мне очевидными?

Смежные вопросы