Tag: static libraries

.NET相当于静态库?

我正在托管代码(主要是C ++ / CLI)中构建一个工具,有两个版本,一个是“普通用户”版本,另一个是“专业版”。 核心代码在两个版本之间是相同的这一事实导致我有点麻烦,因为我想将生成的工具打包为单个程序集(DLL),我不希望必须包含公共的.cpp文件两个版本工具的项目代码。 我宁愿有一个公共代码项目和每个工具版本的项目,并且每个版本的工具项目都依赖于公共代码并根据需要链接它。 在非托管C ++中,我通过将公共代码放在静态库中并将工具的两个版本链接到它来实现这一点。 我似乎无法在C ++ / CLI中使用它。 似乎我被迫将公共代码构建到DLL程序集中,这导致了比我想要的更多的DLL。 因此,总而言之,我无法弄清楚如何在一个项目中构建公共代码并将其与每个最终产品项目链接以生成两个包含公共代码的单个DLL程序集。 我可能做错了但是我试图用netmodules和其他方法来解决这个问题,但是我无法让它工作。 最后,我让它工作的唯一方法是告诉链接器链接公共代码程序集的构建产品而不是有效的结果但是有点像黑客恕我直言。 无论如何,有没有人对我应该如何解决这个问题有任何建议? 编辑:我想我应该提到这样一个事实,即生成的程序集不是100%托管代码,它们包含托管代码和非托管代码的混合,可能在使用C ++ / CLI生成的程序集中非常常见…

是引用该库的所有进程共享的库(DLL)中的静态变量吗?

我知道Web应用程序中使用的静态变量是为Web应用程序中的所有用户共享的。 如果我有一个使用某个静态私有变量的库(DLL),那么使用该库的所有应用程序是否共享该变量的值? 例如,假设我的DLL中有以下代码: private static bool isConnected = false; public static void Connect() { // TODO: Connect. isConnected = true; } public static void Disconnect() { // TODO: Disconnect. isConnected = false; } 然后在应用程序A中,我调用myDLL.Connect() ,它将isConnected的值isConnected为True 。 然后我有一些应用程序B执行相同的操作。 如果应用程序A稍后调用myDLL.Disconnect() ,则应用程序B是否将isConnected视为False因为这两个应用程序共享具有静态变量的同一DLL文件? 在这种情况下,DLL文件在同一文件路径中实际上是相同的文件。 (我之前在这里问了一个关于Web应用程序的类似问题。它没有关系。)

为什么C#没有C ++风格的静态库?

最近我一直在研究一些共享一些常见代码的小.NET应用程序。 代码中引入了一些接口来抽象出用于unit testing的I / O调用。 我希望应用程序是独立的EXE,没有外部依赖性。 这似乎是静态库的完美用例。 想想第三方控制供应商也可以从这个模型中受益。 我错过了一些隐藏的静态库吗? 有没有理由让C#设计师把它们排除在外? 编辑:我知道ILMerge,但它不提供与静态库相同的便利。