我使用的是第三方库,它要求在使用静态方法之前调用它——它设置串行密钥来验证软件的许可证。我需要在多个项目中使用这个库,并且我想避免那些项目需要担心这个许可证。理想情况下,我想创建一个共享程序集,该程序集将处理许可并由使用库的项目引用,并将这些项目与正在进行的任何许可隔离开来。
开始考虑实现这一点的一种方法是使用汇编属性。所以,我做了一个有一个承包商来设置许可证:
[AttributeUsage(AttributeTargets.Assembly)]
public class LibraryLicenseAttribute : Attribute
{
public LibraryLicenseAttribute()
{
Lib.SetLicense("valid key");
}
}
并将其放置在包装项目中:
LibraryWrapperProject
Properties
AssemblyInfo.cs
References
Lib.dll
LibraryLicenseAttribute.cs
并通过将其包含在assemblyinfo.cs中来调用它:
[LibraryLicense]
现在,我可以在另一个使用库的项目中引用此项目:
LibraryUserProject
References
LibraryWrapperProject
LibraryUser.cs
…但是当我去图书馆的时候…
class LibraryUser
{
public LibraryUser()
{
Lib.Use();
}
}
它报告许可证尚未设置。我发现可以在调用项目的assemblyinfo.cs中包含该属性,该属性将被调用。这比将许可证重新分配给所有下游项目要好,但他们仍然需要额外的资金才能使其发挥作用。
此外,有些项目是动态加载的Elseware。例如:
Assembly.Load("LibraryUserProject.dll");
动态加载包含它的程序集时,如何调用授权程序集属性?有没有其他的.NET框架功能可以使这变得更容易?