2

<AL></AL>MSBuild のタスクを実行してパブリッシャー ポリシーを作成したいと考えています。この目的のために、私のcsprojファイルで、構成ファイル名のリストを作成します。

<Target Name="AfterBuild">
   <ItemGroup>
     <ConfigFiles Include="$(TargetDir)\*.config" />
   </ItemGroup>
   <AL 
      LinkResources="%(ConfigFiles.Identity)" 
      Platform="x86" 
      KeyFile="$(ProjectDir)\KeyFile.snk" 
      OutputAssembly="$(TargetDir)\%(ConfigFiles.Filename).dll" 
      Version="@(PolicyVersion)" 
   />
</Target>

バージョン番号が 1 つしか必要ない場合、これは問題なく動作します"@(PolicyVersion"。しかし、構成ファイルごとに異なるバージョン番号が必要な場合はどうでしょうか? 構成ファイルの XML 属性からバージョン番号を取得できましたが、その方法がわからないため、バッチ ビルド中に対応する正しい項目で使用できます。

また、次のことも試しました。構成ファイルの名前はPolicy.2.2xx.Mylib.config. これらはプログラムで作成されます。Policy.2.2xx.Mylib.verさらに、MyLib.verバージョン情報を保持するファイルを作成しました(これは、それぞれMylibで同じですが、他のライブラリでは異なる場合があります)。これを使用して読み取ることができます

<ReadLinesFromFile File="$(TargetDir)\MyLib.ver">
  <Output TaskParameter="Lines" ItemName="PolicyVersion" />
</ReadLinesFromFile> 

MyLibしかし、どうすれば(または) のバージョン情報をタスクPolicy.2.2xx.Mylib内の対応する構成ファイルに関連付けることができますか? 読み取りのよう<AL>に使用しようとしました-タスクのようにこの情報にアクセスできることを望んでいました。したがって、同じmsbatchループを参照していますが、これは機能しません。ドットはアイテム名に違法です。"%(ConfigFies.identity).ver"ItemName"$("%(ConfigFiles.identity).ver")"AL

おそらく、他の 2 つのアイテム グループから新しいアイテム グループを作成するのと同じくらい簡単ですが、これを行うには、この MS ビルド モンスターの経験が十分ではありません。どんな助けでも大歓迎です。

(私はVS 2008を使用していることに注意してください)。

4

1 に答える 1

2

私はあなたが必要とするものを正確に理解していません。構成ファイルの名前からバージョン番号を取り出して、それをタスクのVersionプロパティに渡したいと思います。AL

への呼び出しをラップするターゲットを作成しますALConfigFilesアイテム グループをバッチ処理して、新しいターゲットを呼び出します。ターゲットで、文字列メソッドを使用してバージョン番号を引き出します。

<Target Name="AfterBuild">
    <ItemGroup>
        <ConfigFiles Include="$(TargetDir)\*.config" />
    </ItemGroup>

    <MSBuild Projects="$(MSBuildThisFileFullPath)"
             Properties="LinkResource=%(ConfigFiles.Filename)%(Extension)"
             Targets="_AL" />
</Target>

<Target Name="_AL">
    <Error Condition="'$(LinkResource)' == ''" Text="Missing LinkResource property." />
    <PropertyGroup>
        <_OutputFilename>$(LinkResource.Replace('.config', '')).dll</_OutputFilename>
        <_VersionNumber>$(_OutputFilename.Replace('Policy.',''))</_VersionNumber>
    </PropertyGroup>

    <AL 
        LinkResources="$(LinkResource)" 
        Platform="x86" 
        KeyFile="$(ProjectDir)\KeyFile.snk" 
        OutputAssembly="$(TargetDir)\$(_OutputFilename)" 
        Version="$(_VersionNumber)" />
</Target>
于 2012-06-14T04:46:01.897 に答える