gpt4 book ai didi

c# - 库需要引用 System.Windows.Forms

转载 作者:太空宇宙 更新时间:2023-11-03 10:36:11 26 4
gpt4 key购买 nike

我在查找有关该主题的信息时遇到了问题,可能是因为我不确定如何表述该问题。希望这里的智囊团可以提供帮助或至少提供建议。这种情况可能只是我的保留,但它困扰着我,所以我想我会寻求帮助以解决这个问题。

我有一个 C# 库,里面装满了其他程序集中使用的实用程序类。我所有的扩展都驻留在这个库中,它非常方便。我的任何其他需要使用这些类的库或可执行文件都必须自然地引用该库。

但是我拥有的扩展之一是对 Control 类的扩展,以一种不太复杂的方式处理跨线程控制更新。因此,实用程序库必须引用 System.Windows.Forms。

问题是任何引用实用程序库的库或可执行文件现在也必须引用 System.Windows.Forms,否则我会收到缺少引用的构建错误。虽然这没什么大不了的,但让与控件或窗体无关的程序集不得不引用 System.Windows.Forms 似乎有点愚蠢,因为实用程序库确实如此,尤其是因为它们中的大多数实际上并没有使用我编写的 InvokeAsRequired() 扩展。

我考虑过将 InvokeAsRequired() 扩展移到它自己的库中,这将消除 System.Windows.forms 问题,因为只有需要使用 InvokeAsRequired() 扩展的程序集才会引用 SWF....但那时我会有一个图书馆,里面只有一件事,这可能会让我更烦恼。

除了分离出“有问题的”方法并创建一个几乎空的库之外,是否有解决此要求的方法?也许是编译设置之类的?

  • 应该注意的是,“有问题的方法”实际上在具有 UI 的多个项目中使用。我所做的很多 UI 更新都是由于事件的到来而尝试从另一个线程更新 Windows 窗体控件会导致各种 UI 线程问题。因此在需要时处理 Invoke 的方法。 (尽管我个人认为整个 InvokeRequired 模式应该包含在控件本身中,而不是让外部的东西首先进行线程对齐)。

最佳答案

如果它只是一个函数,则将其作为源代码文件打包到 NuGet 包中,然后将 NuGet 包添加到您的项目中。然后,此代码将很容易部署到新项目(也很容易更新),但您不需要创建单独的程序集。只需将其编译到您的应用程序中即可。

然后您可以将您的 NuGet 包存储在本地 NuGet 存储库中,或者获取一个 myget 帐户,或者甚至只是将它存储在您网络上的某个位置。最坏的情况是,您可以将其 checkin 您的版本控制,但我只会 checkin 您从中构建 nuget 包的“项目”,这样您就可以在需要时重建包。

谁知道呢,在某个时候,您可能会添加更多需要 Windows 窗体的实用函数,到那时您就可以证明一个单独的程序集是合理的。

关于c# - 库需要引用 System.Windows.Forms,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27724695/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com