为什么在调用项目中期望添加类库中的外部dll?

Why adding external dll in class library expected to be added in calling project?

提问人:Farhan Iqbal 提问时间:8/31/2023 更新时间:8/31/2023 访问量:30

问:

我必须调用一个外部 .Net Framework 程序集,该程序集需要在不同的项目(控制台、桌面和 Web 应用程序)中使用。为了避免添加外部程序集,我创建了一个类库项目,并将外部程序集调用包装在一个 Friend 类中,并从向外界公开的公共类调用该类。但是当我运行我的项目时,它希望 dll 也包含在控制台应用程序中。

我原以为外界无法访问好友类,因此外界不需要使用程序集。但是,一旦我从外部程序集继承了我的朋友类,MyCalling.UserLogin 的控制台应用程序调用就会爆炸。我还尝试将 Friend 类设为 Private,但效果不佳。

Public Class MyCaller
    Public Shared Function UserLogin(ByVal username As String, ByVal password As String) As Boolean
        Return MyFunctions.Instance.UserLogin(username, password)
    End Function
End Class

Imports ExternalLibrary

Friend Class MyFunctions
        Inherits ExternalClass

        Private Shared instanceField As MyFunctions = Nothing
        Friend Shared ReadOnly Property Instance As MyFunctions
            Get
                If instanceField Is Nothing Then
                    instanceField = New MyFunctions()
                End If
                Return instanceField
            End Get
        End Property

        Public Function UserLogin(ByVal username As String, ByVal password As String) As Boolean
            Return False
        End Function
End Class

我尽量避免将外部程序集添加到多个项目中,并希望我的代码不会期望在朋友类中引用的程序集,但每次我运行项目时,它都会爆炸

vb.net 朋友 .net-4.8 internals external-assemblies

评论

1赞 Damien_The_Unbeliever 8/31/2023
该外部程序集的实际 JIT 可编译和可执行代码仍然只存在于该外部程序集中,它不会被拉入类库中,因此在运行时仍然需要外部程序集,是的,当它到达需要编译和运行的代码时。
1赞 Farhan Iqbal 8/31/2023
@Damien_The_Unbeliever,如果 External.dll 已经包含在引用的类库中,那么在 Web 和桌面中添加它对我来说没有多大意义
0赞 SSS 9/1/2023
你有外部程序集的源代码吗?如果没有,则需要包含 DLL。
0赞 Albert D. Kallal 9/2/2023
如果外部“引用”类库具有程序集引用,则理论上,在任何其他新项目中引用该新引用的类库应该在生成时拉入所需的 .dll。我怀疑我们在这里遗漏了一个重要的细节。您是在谈论将多个项目合并为一个项目,还是在谈论引用这些其他程序集的单独类,然后您现在使用 + 引用该新类。如前所述,对该新外部类的简单引用应导致在生成时将所有 .dll 拉入(抛出)到 bin 文件夹中。
0赞 9/2/2023
我理解 Friend 指令的方式是,它只会使变量/函数将自己暴露给使用它们的类。尝试将其公开以便能够继承

答: 暂无答案