c# AssemblyInfo.cs "bug"

7

有人能解释一下如何正确地生成程序集信息吗?

这是我的AssemblyInfo.cs文件:

[assembly: AssemblyTitle("Title")]
[assembly: AssemblyDescription("Description")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("Mycompany")]
[assembly: AssemblyProduct("ProductName")]
[assembly: AssemblyCopyright("Copyright ©")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]

[assembly: ComVisible(true)]

[assembly: Guid("xxxxxx-xxxxx-xxxxx")]    

[assembly: AssemblyVersion("1.0")]
[assembly: AssemblyFileVersion("1.0")]
[assembly: NeutralResourcesLanguageAttribute("en")]

以下是属性窗口中显示的内容:Details

你可以看到Description和Language与AssemblyInfo.cs中不同。

同时,可能存在公司名称(AssemblyCompany)的问题,因为当我在ccleaner中打开启动项时,程序的公司字段为空...enter image description here

我错在哪里了?


3
我无法很快找到详细信息,但你在那里设置了程序集信息(.NET),然而并非所有这些属性都会传播到可执行文件(Win32 PE)。"详情"选项卡显示后者的详细信息。至于标题/描述混淆:AssemblyTitle:"为该属性指定的信息将出现在程序集的Windows文件属性对话框的“详情”选项卡中,属性名为文件说明"。 - CodeCaster
NeutralResourcesLanguageAttribute 用于 .net 程序集。语言属性用于非托管使用。 - Daniel A. White
看起来 AssemblyTitle("Title") 对应文件描述。从您提供的代码和截图来看,这一点似乎显而易见。 - David Heffernan
1个回答

6

Windows并不了解托管程序集属性。实际上你看到的是一个嵌入在程序集中的非托管资源。C#编译器会根据你的AssemblyInfo.cs文件中的属性值自动生成它。你可以通过文件+打开+文件,选择你的.dll或.exe文件来查看它。双击Version.1资源可以打开非托管资源编辑器,这个编辑器在C++项目中使用。

从托管属性到非托管版本资源的映射是不完美的。例如,你无法看到[AssemblyVersion]属性的值。在.NET中非常重要,Windows只显示[AssemblyFileVersion]属性的值。

文化差异确实是一种阻碍。包含代码的.NET程序集始终将AssemblyName.CultureName设置为“*”。只有卫星程序集有文化。标题与描述,非托管版本资源只有一个限定字段,他们选择[AssemblyTitle]来映射到该字段。

你可以使用资源脚本创建自己的非托管版本资源,并使用rc.exe进行编译。你可以在项目+属性、应用程序选项卡、资源文件单选按钮中告诉C#编译器。除非你能够自动化更新和重新编译资源脚本以保持版本号同步,否则你很难享受它。这将很快让你精疲力竭。


我正在使用Visual Studio Express,所以我没有资源编辑器...有没有一些教程可以让我学习正确的设置.exe属性的方法(ccleaner图片上的所有程序都有发布者名称,因此一定有一种“正常”且容易的方法来做到这一点)? - mgulan
1
它几乎肯定会显示AuthentiCode证书的发布者。是的,它们很正常。不,容易并不完全是正确的词。证书需要花钱,你将花费数百美元来让另一家公司向你的客户证明你值得信赖。 - Hans Passant

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接