8 Stimmen

MSBuild OutputPath-Eigenschaft und absolute Pfade

Ich versuche, den Wert OutputPath auf einen absoluten Pfad festzulegen:

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

Aber ich bekomme diesen Fehler:

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

Gibt es eine Möglichkeit, einen absoluten Pfad mit der Eigenschaft OutputPath zu verwenden? Ich habe versucht, mit der Eigenschaft BaseOutputPath zu experimentieren:

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

Aber es scheint ignoriert zu werden. Wofür werden BaseOutputPath und BaseIntermediateOutputPath verwendet?

5voto

Paul Michaels Punkte 15147

Ich bin mir nicht sicher, ob Sie das tun können, was Sie meinen, aber Sie können etwas Ähnliches wie das Folgende hinzufügen:

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

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

Dadurch wird sie nach der Erstellung an den entsprechenden Ort kopiert.

3voto

Julien Hoarau Punkte 47065

Versuchen Sie es mit OutDir anstelle von 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>

0voto

Henrik Punkte 9416
  1. Kopieren Sie die .target- und .dll-Dateien aus dem Verzeichnis des Installationsprogramms
  2. Ändern Sie die Zeilen am oberen Rand, die wie folgt aussehen: <UsingTask TaskName="GetProjectProperties" AssemblyFile="../../ ..lallal/VisualStudio/v10.0/Microsoft.Web.Publishing.Tasks.dll"/> und c* Verschieben Sie diese .target- und .dll-Dateien in den Ordner Ihres Anbieters neben der kopierten Microsoft.WebDeployment.targets-Datei, die Sie gerade bearbeiten *. Setzen Sie das Attribut, AssemblyFile="Microsoft.Web.Publishing.Tasks.dll"
  3. Fügen Sie die Zeile <EnablePackageProcessLoggingAndAssert Condition="'$(EnablePackageProcessLoggingAndAssert)' == ''">True</EnablePackageProcessLoggingAndAssert> zum ursprünglichen PropertyGroup .
  4. Legen Sie den OutputPath wie gewünscht in der aktuellen Datei/anderen Tags/anderen Build-Proj-Datei fest.
  5. Zeile ~290 bearbeiten zu <WebPublishPipelineProjectDirectory Condition="'$(WebPublishPipelineProjectDirectory)'==''">$(OutputPath)</WebPublishPipelineProjectDirectory>

0voto

Tom Smellie Punkte 1

Ist es nicht möglich, anstelle aller Schritte in der Antwort vom Oktober einfach zu definieren WebPublishPipelineProjectDirectory mit demselben Pfad wie OutputPath ?

Ich habe es in meiner CI-Lösung ausprobiert (mit CruiseControl ) und es schien zu funktionieren.

Kennt jemand irgendwelche Nebenwirkungen, die mir nicht auffallen, wenn ich dies tue?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X