2

setup.exe があります。これは基本的な MSI インストール パッケージです。InstallShield を使用して作成します。MSBuild スクリプトで FileVersion を取得するにはどうすればよいですか? GetAssemblyIdentityタスクを使用できません

    <GetAssemblyIdentity AssemblyFiles="setup.exe">
        <Output
            TaskParameter="Assemblies"
            ItemName="MyAssemblyIdentities"/>
    </GetAssemblyIdentity>

私の setup.exe はアセンブリではなく、アセンブリ マニフェストが含まれていないため、このタスクを呼び出すとエラーが表示されます。

ファイルまたはアセンブリ 'setup.exe' またはその依存関係の 1 つを読み込めませんでした。モジュールには、アセンブリ マニフェストが含まれている必要がありました。

4

1 に答える 1

3

FileVersionInfoクラスはこの機能を提供し、インライン コードにより MSBuild から直接使用できます。

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" >

  <UsingTask TaskName="GetVersion" TaskFactory="CodeTaskFactory"
             AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll" >
    <ParameterGroup>
      <TheFile Required="true" ParameterType="System.String"/>
      <TheVersion ParameterType="System.String" Output="true" />
    </ParameterGroup>
    <Task>
      <Code Type="Fragment" Language="cs">
        <![CDATA[
          TheVersion = System.Diagnostics.FileVersionInfo.GetVersionInfo( TheFile ).FileVersion;
         ]]>
      </Code>
    </Task>
  </UsingTask>

  <Target Name="DoGetVersion">
    <GetVersion TheFile="$(MyAssemblyIdentities)">
      <Output PropertyName="FetchedVersion" TaskParameter="TheVersion" />  
    </GetVersion>
    <Message Text="Version = $(FetchedVersion)" />
  </Target>

</Project>
于 2013-08-08T18:44:53.163 に答える