我正在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("© 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文件以便其属性对所有程序集可见的正确方法是什么?有什么明显的地方我做错了吗?
答案 0 :(得分:1)
如果收到此错误,则表明此错误已在另一个文件中指定。我不知道为什么,但是在VB中,该文件对开发人员隐藏。在C#中,它位于属性中,称为AssemblyInfo.cs
。
您可以从Properties->Application->Assembly information
项目的Bar
页访问它,然后在此处进行编辑,并将值设置为空字符串,但是您将无法从此处完全删除整个属性。
因此,您应该做的是搜索AssemblyProduct
。在两个项目中都应该找到它。然后,双击在Bar
项目中找到的一项。现在,它应该打开.vb文件,您可以在其中看到这些属性,然后删除它们。
或者,您可以仅访问磁盘上的文件,并且在My Project
文件夹中应该有一个声明了那些属性的文件。
之后,您可以轻松地将文件添加为链接或正常添加。