7

ソリューションのルートにGlobalAssemblyInfo.csファイルがあり、出力アセンブリに厳密な名前を付けることができるように、次のようなエントリが含まれています。

#pragma warning disable 1699
[assembly : AssemblyKeyFile("..\\keyfile.snk")]
#pragma warning restore 1699

このアプローチには2つの欠点があります。まず、AssemblyKeyFileAttributeは非推奨になっているため、コンパイルの警告を回避するには、上記のプラグマ行が必要です。次に、相対パスを使用するためにすべてのプロジェクトをルートに対して同じ深さに保つか、他のユーザーのマシン(および継続的インテグレーションサーバー/ビルドエージェント)のチェックアウト場所を指定する絶対パスを使用する必要があります。 。

プロジェクトファイルに強い名前を設定する各プロジェクトを実行する以外に、これよりも優れた解決策がある人はいますか?

4

3 に答える 3

1

Richard は、情報漏えいについて適切に指摘しています。Microsoft の .NET チームから、これについて説明している投稿を見つけました。だから私は彼の提案に行き、次の NAnt ターゲットを考え出しました:

  <target name="strongName" description="Strong names the output DLLs">
    <foreach item="File" property="filename">
      <in>
        <items>
          <include name="**/*.csproj"></include>
          <exclude name="**/*.Test.csproj"></include>
        </items>
      </in>
      <do>
        <echo message="${filename}" />
        <xmlpoke file="${filename}" xpath="/m:Project/m:PropertyGroup/m:SignAssembly" value="false">
          <namespaces>
            <namespace prefix="m" uri="http://schemas.microsoft.com/developer/msbuild/2003" />
          </namespaces>
        </xmlpoke>
        <xmlpoke file="${filename}" xpath="/m:Project/m:PropertyGroup/m:AssemblyOriginatorKeyFile" value="..\keyfile.snk">
          <namespaces>
            <namespace prefix="m" uri="http://schemas.microsoft.com/developer/msbuild/2003" />
          </namespaces>
        </xmlpoke>
      </do>
    </foreach>
  </target>

<namespaces> 要素は、csproj ファイルで XPath を解決するために必要です。これは VS2008 用であり、VS2005 では少し異なるものが必要になる場合があることに注意してください。

于 2009-04-03T16:07:54.087 に答える
1

鍵署名のこれらの属性は、正当な理由 (情報漏えい) のために廃止されました。これは、プロジェクトのルートに進むもう 1 つの理由です。

多くのプロジェクトがある場合は、記録されたマクロを介して設定したり、.csproj ファイルを直接操作したりすることもできます (最初に VS からアンロードされていることを確認してください)。

于 2009-04-03T15:32:15.030 に答える