Achtung bei der Parameterübergabe an mage.exe

Gerade wenn man mit MSBuild ClickOnce Pakete bearbeitet (aufbrechen und erneut signiert) muss man darauf aufpassen, dass man die Parameter korrekt an die mage.exe  übergibt.

Ich verwende normalerweise in Projekten eine solche Ordnerstruktur

mage

  • bin –> Binaries
  • bld –> Build Files
  • doc –> Dokumentationen
  • pkg –> ClickOnce Paket
  • src –> Source Files

Hierbei kann es zu Problemen kommen, wenn man davon ausgeht, dass ein Buildfile (im Ordner bld) aus dem Ordner bld heraus aufgerufen wird

c:\dev\bld\msbuild.exe sample_bld.msbuild

Falls man innerhalb des BuildFiles dann zum Beispiel die Ordnerpfade wie folgt zusammenbaut

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" 
         InitialTargets="Init" 
         DefaultTargets="Build" 
         xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
    <src Condition="'$(src)' ==''">$(MSBuildStartupDirectory)\..\src\</src>
    <pkg Condition="'$(pkg)' ==''">$(MSBuildStartupDirectory)\..\pkg\</pkg>
    <bin Condition="'$(bin)' ==''">$(MSBuildStartupDirectory)\..\bin\</bin>
    <doc Condition="'$(doc)' ==''">$(MSBuildStartupDirectory)\..\doc\</doc>
</PropertyGroup>
 
<Target Name="Init">
    <Message Text="$(src)"/>
    <Message Text="$(bin)"/>
    <Message Text="$(pkg)"/>
    <Message Text="$(doc)"/>
</Target>
</Project>

 

Entstehen folgende Werte

Property Value
src C:\dev\MageSample\bld\..\src\
bin C:\dev\MageSample\bld\..\bin\
pkg C:\dev\MageSample\bld\..\pkg\
doc C:\dev\MageSample\bld\..\doc\

Genau mit diesen Werten entsteht dann ein Problem mit der mage.exe. Mage kann den Teil “\..\” nicht interpretieren. Leider bekommt man bei der Ausführung der mage.exe mit einem solchen Pfad keine Fehlermeldung. Erst bei der Installation der eigentlichen Anwendung oder beim Update bekommt man dementsprechende Fehler angezeigt, weil im Application-Manifest ein falscher Pfad zum Deployment-Manifest hinterlegt wird.

 

Doch mit ein wenig Geschick kann man dieses Problem einfach in den Griff bekommen.

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" 
    InitialTargets="InitDirectories" 
    DefaultTargets="Build" 
    xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
    <src Condition="'$(src)' ==''">src\</src>
    <pkg Condition="'$(pkg)' ==''">pkg\</pkg>
    <bin Condition="'$(bin)' ==''">bin\</bin>
    <doc Condition="'$(doc)' ==''">doc\</doc>
</PropertyGroup>
 
<Target Name="InitDirectories">
    <CreateItem Include="$(MSBuildStartupDirectory)\..\">
        <Output ItemName="root" TaskParameter="Include"/>
    </CreateItem>
    <PropertyGroup>
        <src>@(root->'%(FullPath)')$(src)</src>
        <bin>@(root->'%(FullPath)')$(bin)</bin>
        <pkg>@(root->'%(FullPath)')$(pkg)</pkg>
        <doc>@(root->'%(FullPath)')$(doc)</doc>
    </PropertyGroup>
    <Message Text="$(src)"/>
    <Message Text="$(bin)"/>
    <Message Text="$(pkg)"/>
    <Message Text="$(doc)"/>
</Target>
</Project>

Mit dieser Variante erhält man folgende Ergebnisse

Property Value
src C:\dev\MageSample\src\
bin C:\dev\MageSample\bin\
pkg C:\dev\MageSample\pkg\
doc C:\dev\MageSample\doc\

Übergibt man diese dann an mage.exe dann wird das ClickOnce Paket auch korrekt verarbeitet und kann wie gewohnt verwendet werden.

 

 

Technorati Tags: ,,
DotNetKicks-DE Image
Published Freitag, 10. Juni 2011 20:51 von ThorstenHans
Abgelegt unter: , ,

Kommentare

Keine Kommentare

Kommentar abgeben

(verpflichtend) 
(verpflichtend) 
(optional)
(verpflichtend)