我最近听说 .dll 可以在加载后立即运行代码,例如,当加载引用 .dll 的应用程序时。尽管我自己做了一些测试并尝试在这里和在 Google 上寻找答案,但我无法找到某种方法来为 .dll 生成初始化方法。
我想知道当应用程序加载 .dll 时是否真的可以运行代码。
如果可以,我该怎么做?
最佳答案
警告(感谢 Ben Voigt 的捕获:)):下面的代码仅适用于 C# 保证生成的类 不会是 beforefieldinit 强>。 但是使用 C++/CLI 应该不会那么容易:Managed C++ Static Constructor not called in .net4
所以正如我的评论中所述,您可以使用这样的东西:
using System;
class MyAwesomeLibrary
{
static MyAwesomeLibrary()
{
Console.WriteLine(string.Format("Hey {0} is using me!", Environment.UserName));
}
public static int GetTheAnswer()
{
return 42;
}
}
class Client
{
static void Main()
{
Console.WriteLine("The answer is: " + MyAwesomeLibrary.GetTheAnswer());
}
}
在静态构造函数中,您可以执行高级操作,例如检查注册表、与服务器通信...
如果你是坏人(或者只是一个想要保护自己权利的开发者/公司),你可以抛出一个异常:
throw new Exception("The library has not been correctly registered...");
这将导致 TypeInitializationException防止使用整个库类。
或者您可以实现一个CheckMe 方法并要求所有用户在使用该库之前调用它,甚至进行身份验证并获取他们每次使用某些东西时都会使用的安全 token ...
编辑:
无论您使用何种保护措施,坚定的攻击者都可以通过反编译库来绕过所有管道,因此如果可以的话,您也应该混淆您的库以(稍微)受到更多保护。
关于c# - 为 .dll 生成初始化代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17126779/