在我的许多.NET项目中,我声明了全局使用的库函数。安装产品时会注册包含这些函数的DLL,因此声明很简单:
例如
Declare Sub SomeFunction Lib "SomeLib.dll" (ByVal CommonStr As String, ByVal
WhichVar As Integer)
然而,当我正在调试/开发时,我经常需要明确引用dll的路径,如下所示:
Declare Sub SomeFunction Lib "C:\Usethisone\SomeLib.dll" (ByVal CommonStr As String, ByVal
WhichVar As Integer)
我的问题是我在将代码发送到QA时偶尔忘记删除文件路径,以便将其发回。 那么,我该如何对此进行编码,以便每次将项目发送出去进行测试时都不需要记得改变这条路径?当然,Declares在类的声明部分中,因此我不能使用任何If逻辑来切换声明(例如,如果testsfile.txt存在则使用测试声明)。
我还想过创建一个我可以继承的全局dll - 一个带有生产声明,一个带有测试声明 - 但这是一个低级别的重大变化。我担心它不会起作用,会引起参考问题和/或不会得到管理层的批准。
那里有任何更简单的想法吗?
答案 0 :(得分:2)
在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属性之间的差异
答案 1 :(得分:2)
您可以使用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
在编译时评估,而不是在运行时评估。仅编译匹配的代码。另一个被丢弃了。