我正在使用第 3 方库,该库需要在使用之前调用静态方法 - 它设置序列密钥以验证软件的许可证。我需要在多个项目中使用这个库,我想保护这些项目不需要担心这个许可证。理想情况下,我想创建一个共享程序集,它将处理许可并由使用该库的项目引用它 - 并将这些项目与甚至知道正在发生的任何许可隔离。
开始考虑完成此操作的一种方法可能是使用程序集属性。因此,我制作了一个具有设置许可证的承包商:
[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 中包含该属性,并且该属性将被调用。这比将许可重新分配给所有下游项目要好,但他们仍然需要额外的费用才能使其发挥作用。
此外 - 一些项目是动态加载的。例如:
Assembly.Load("LibraryUserProject.dll");
在动态加载包含它的程序集时如何调用许可程序集属性?是否有另一个 .NET 框架功能可以使这更容易?