如何在运行时更改库声明?
How can I change a library declaration at runtime?
在我的许多 .NET 项目中,我声明了全局使用的库函数。包含这些功能的 DLL 在安装产品时注册,因此声明很简单:
例如
Declare Sub SomeFunction Lib "SomeLib.dll" (ByVal CommonStr As String, ByVal
WhichVar As Integer)
但是,当我 debugging/developing 时,我经常需要像这样显式引用 dll 的路径:
Declare Sub SomeFunction Lib "C:\Usethisone\SomeLib.dll" (ByVal CommonStr As String, ByVal
WhichVar As Integer)
我的问题是,在将代码发送给 QA 时,我偶尔会忘记删除文件路径,因此它会被发回。
那么,我如何编写代码,这样我就不需要在每次发送项目进行测试时都记住更改此路径?当然,声明位于 class 的声明部分,因此我不能使用任何 If 逻辑来切换声明(例如,如果 testingfile.txt 存在,则使用测试声明)。
我还考虑过创建一个我可以从中继承的全局 dll - 一个带有生产声明,一个带有测试声明 - 但这是一个低级别的重大变化。恐怕它要么行不通,要么会导致参考问题 and/or 不会得到管理层的批准。
还有更简单的想法吗?
在 VB.NET 中,就像在 C# 中一样,您可以使用 preprocessor directive #if...#else...#end if
声明两个不同版本的 dll,一个用于 DEBUG 编译,一个用于 RELEASE 编译
#if DEBUG Then
Declare Sub SomeFunction Lib "C:\Usethisone\SomeLib.dll" (ByVal CommonStr As String, ByVal
WhichVar As Integer)
#else
Declare Sub SomeFunction Lib "SomeLib.dll" (ByVal CommonStr As String, ByVal
WhichVar As Integer)
#end if
现在,当您编译以将您的应用程序发送给 QA 时,您只需切换到 Release 即可发送正确的实现
旁注:Take a look Declare 和 DllImport 属性之间的区别
您可以使用 Conditional Compilation in Visual Basic
#If DEBUG
Declare Sub SomeFunction Lib "C:\Usethisone\SomeLib.dll" (ByVal CommonStr As String, _
ByVal WhichVar As Integer)
#Else
Declare Sub SomeFunction Lib "SomeLib.dll" (ByVal CommonStr As String, _
ByVal WhichVar As Integer)
#End If
如果您使用 Debug 配置,您将获得开发代码,如果您使用 Release 配置,您将获得生产版本代码。
请注意 #If
是在编译时计算的,而不是在运行时计算的。只编译匹配的代码。另一个被丢弃了。
在我的许多 .NET 项目中,我声明了全局使用的库函数。包含这些功能的 DLL 在安装产品时注册,因此声明很简单:
例如
Declare Sub SomeFunction Lib "SomeLib.dll" (ByVal CommonStr As String, ByVal
WhichVar As Integer)
但是,当我 debugging/developing 时,我经常需要像这样显式引用 dll 的路径:
Declare Sub SomeFunction Lib "C:\Usethisone\SomeLib.dll" (ByVal CommonStr As String, ByVal
WhichVar As Integer)
我的问题是,在将代码发送给 QA 时,我偶尔会忘记删除文件路径,因此它会被发回。 那么,我如何编写代码,这样我就不需要在每次发送项目进行测试时都记住更改此路径?当然,声明位于 class 的声明部分,因此我不能使用任何 If 逻辑来切换声明(例如,如果 testingfile.txt 存在,则使用测试声明)。
我还考虑过创建一个我可以从中继承的全局 dll - 一个带有生产声明,一个带有测试声明 - 但这是一个低级别的重大变化。恐怕它要么行不通,要么会导致参考问题 and/or 不会得到管理层的批准。
还有更简单的想法吗?
在 VB.NET 中,就像在 C# 中一样,您可以使用 preprocessor directive #if...#else...#end if
声明两个不同版本的 dll,一个用于 DEBUG 编译,一个用于 RELEASE 编译
#if DEBUG Then
Declare Sub SomeFunction Lib "C:\Usethisone\SomeLib.dll" (ByVal CommonStr As String, ByVal
WhichVar As Integer)
#else
Declare Sub SomeFunction Lib "SomeLib.dll" (ByVal CommonStr As String, ByVal
WhichVar As Integer)
#end if
现在,当您编译以将您的应用程序发送给 QA 时,您只需切换到 Release 即可发送正确的实现
旁注:Take a look Declare 和 DllImport 属性之间的区别
您可以使用 Conditional Compilation in Visual Basic
#If DEBUG
Declare Sub SomeFunction Lib "C:\Usethisone\SomeLib.dll" (ByVal CommonStr As String, _
ByVal WhichVar As Integer)
#Else
Declare Sub SomeFunction Lib "SomeLib.dll" (ByVal CommonStr As String, _
ByVal WhichVar As Integer)
#End If
如果您使用 Debug 配置,您将获得开发代码,如果您使用 Release 配置,您将获得生产版本代码。
请注意 #If
是在编译时计算的,而不是在运行时计算的。只编译匹配的代码。另一个被丢弃了。