2009-04-03 13 views
7

私は、私のソリューションのルートにGlobalAssemblyInfo.csファイルを持っています。私は、出力アセンブリの厳密な名前付けを可能にするために、次のようなエントリを持っています。GlobalAssemblyInfo.csと強力な名前付け

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

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

誰よりも、プロジェクトファイルで厳密な名前を設定する各プロジェクトを通過する以外に、これより優れたソリューションがありますか?

答えて

1

重要な理由(情報漏えい)のために、これらのキー署名の属性は推奨されなくなりました。これが、プロジェクトルートのもう一つの理由です。

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

2

まあ、パスの問題を避けるには、代わりに[assembly:AssemblyKeyName(...)]を使用できます(ただし、IIRCも廃止予定です)。 sn -iを使用して名前付きキーをインストールします。ビルドする各マシンにこのキーを追加する必要があります。

それ以外は、はい、おそらくプロジェクトファイルを編集する必要があります。

+0

合意しました。 –

1

リチャードは情報漏えいについてよく指摘しています。私は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> 

XPathはcsprojファイルで解決されるため<名前空間>要素が必要である - これはVS2008のためであることに注意してください、とVS2005では若干異なることがあります。

関連する問題