如何从Web项目引用的.NET程序集中获取属性?

时间:2018-12-13 16:23:21

标签: asp.net vb.net visual-studio-2015 .net-assembly

我正在vb.NET(4.6.2),ASP.NET和VIsual Studio 2015中工作。

此问题与如何从程序集中加载属性无关。我的示例代码演示了这一点。

我有一个Web应用程序(“ foo”),该应用程序在同一解决方案(“ bar.dll”)中引用了一个DLL项目。

Web应用程序包括一个“ AssemblyVersionInfo.vb”文件,该文件用普通引号引起来:

Imports System.Reflection
<Assembly: AssemblyProduct("Foo Product")> 
<Assembly: AssemblyCompany("Foo Company")>
<Assembly: AssemblyCopyright("&copy; Foo, Inc.")>
<Assembly: AssemblyTrademark("")>
<Assembly: AssemblyFileVersion("18.02.00")>
<Assembly: AssemblyVersion("18.02.00")>

Bar.DLL项目需要访问版本信息,并尝试这样调用它:

Dim asmbly As [Assembly] = [Assembly].GetExecutingAssembly
Dim tnProduct As AssemblyProductAttribute = System.Attribute.GetCustomAttribute(asmbly, GetType(AssemblyProductAttribute))
Dim tnCompany As AssemblyCompanyAttribute = System.Attribute.GetCustomAttribute(asmbly, GetType(AssemblyCompanyAttribute))
Dim tnCW As AssemblyCopyrightAttribute = System.Attribute.GetCustomAttribute(asmbly, GetType(AssemblyCopyrightAttribute))
Dim tnVersion As AssemblyFileVersionAttribute = System.Attribute.GetCustomAttribute(asmbly, GetType(AssemblyFileVersionAttribute))

Me.AppName = tnProduct.Product
Me.AppVersion = tnVersion.Version
Me.Copyright = tnCW.Copyright
Me.Company = tnCompany.Company

这是我的问题:在运行时,“ Me.AppName”行抛出“未设置对象引用”异常。单步调试显示tnProduct,tnVersion,tnCW和tnCompany对象全都不是。

因此,我认为bar.dll项目需要其自己的AssemblyVersionInfo.vb文件。我从Web项目中将AssemblyVersionInfo.vb文件的副本添加到bar.dll项目中(既作为常规文件又作为链接),但遇到许多编译错误:

Attribute 'AssemblyCompanyAttribute' cannot be applied multiple times'

...每个属性的依此类推。

在解决方案中包括AssemblyVersionInfo.vb文件以便其属性对所有程序集可见的正确方法是什么?有什么明显的地方我做错了吗?

1 个答案:

答案 0 :(得分:1)

如果收到此错误,则表明此错误已在另一个文件中指定。我不知道为什么,但是在VB中,该文件对开发人员隐藏。在C#中,它位于属性中,称为AssemblyInfo.cs

您可以从Properties->Application->Assembly information项目的Bar页访问它,然后在此处进行编辑,并将值设置为空字符串,但是您将无法从此处完全删除整个属性。

因此,您应该做的是搜索AssemblyProduct。在两个项目中都应该找到它。然后,双击在Bar项目中找到的一项。现在,它应该打开.vb文件,您可以在其中看到这些属性,然后删除它们。

或者,您可以仅访问磁盘上的文件,并且在My Project文件夹中应该有一个声明了那些属性的文件。

之后,您可以轻松地将文件添加为链接或正常添加。

类似这样的事情: enter image description here