2017-09-02 38 views
1

在“旧”世界中,我将定义一个AssemblyProductAttributeAssemblyTrademarkAttribute,它们将在Windows资源管理器中的文件propeties中显示为“产品名称”和“法律商标” 。如何使用新的csproj构建系统在csproj中定义AssemblyProduct

在Visual Studio 2017中用于netstandard项目的新简化msbuild系统中,首选的方法是定义所有这些程序集级别属性in the csproj directly并让msbuild生成实际属性。

但似乎没有办法在csproj中定义“产品名称”和“法律商标”。或者在那里? This msbuild target似乎暗示它应该在AssemblyProductAttribute的底层工作。

我该如何添加这两件事?

Udapte: 好,所以对于AssemblyProductAttribute可以写入<Product>Foo</Product>右转入的csproj文件。但AssemblyTrademarkAttribute呢?

+0

仅仅因为他们向IDE添加了一个属性页面并不是首选的方式。特别是对于我想象的移植旧项目的程序员而言。在代码中使用具有属性的旧样式仍可使用,您可以在任何位置放置[assembly:AssemblyTrademark(“foobar”)]。 –

+0

我认为这是首选方法,因为当你在代码中定义属性然后使用该属性页面时,你会得到一个关于重复属性的编译器错误。在VS的早期版本中,这修改了代码中的属性(AssemblyInfo.cs),但现在不再了。 – bitbonk

+0

人们总是可以创建一个新的cs文件并将组件属性放入其中,所以它并不重要。虽然可以使用属性并定义单个导入的msbuild文件来为所有项目设置值(即使是跨越混合的f#+ c#解决方案),但msbuild集成的版本更好, –

回答

2

您可以添加程序集属性尚未通过这些目标发射项目:

<ItemGroup> 
    <AssemblyAttribute Include="System.Reflection.AssemblyTrademarkAttribute"> 
    <_Parameter1>My Trademark</_Parameter1> 
    </AssemblyAttribute> 
</ItemGroup> 

一个例子可以看出here它如何被用来生成InternalsVisibleTo属性。