GlobalAssemblyInfo.cs和强大的命名

我在我的解决方案的根目录中有一个GlobalAssemblyInfo.cs文件,并且我在其中具有类似下面的条目以启用强大的命名我的输出程序集。

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

这种方法有两个缺点。 首先,AssemblyKeyFileAttribute已被弃用,所以为了避免编译警告,我需要上面看到的编译指示行。 其次,我需要将所有项目都保持在与根相同的深度以使用相对路径,或者使用绝对路径,该路径决定了其他用户计算机上的结帐位置(以及持续集成服务器/构建代理) 。

有没有人有比这更好的解决方案,除了通过项目文件中的每个项目设置强命名?


这些用于密钥签名的属性由于合理的原因(信息泄露)而被弃用,这是执行项目路线的另一个原因。

如果您有很多项目,可以通过录制的宏设置它们,甚至直接操作.csproj文件(确保它们先从VS中卸载)。


那么,为了避免路径问题,你可以使用[assembly:AssemblyKeyName(...)]来代替(尽管IIRC这也被弃用); 使用sn -i来安装一个已命名的密钥。 每台机器(即建立)都需要这个密钥添加。

除此之外; 是的,你可能需要编辑项目文件。


理查德关于信息泄露的观点很好 - 我现在从微软的.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中可能需要略微不同的东西。

链接地址: http://www.djcxy.com/p/42519.html

上一篇: GlobalAssemblyInfo.cs and strong naming

下一篇: transfer data from Excel to SQL Server