我的目标是在Visual Studio Team Services中为测试和生产环境创建构建定义。我需要在我的代码中更新2个变量,这些变量决定哪个数据库以及环境使用哪个blob存储。到目前为止,我已经在Resource变量中处理了这个值,并从库的代码My.Resources.DB
中提取了该值,对于Azure辅助角色,该值为Microsoft.Azure.CloudConfigurationManager.GetSetting("DatabaseConnectionString")
。但是,每次发布版本时更改4个变量都会令人疲劳。是否可以将构建过程中的变量传递给Visual Basic代码?
我看到很多接近我想要的帖子,但他们是面向C#。由于超出我的影响的原因,这个项目是用VB.NET编写的。看来我有2个选项。首先,我可以用一些定义的属性调用MSBuild进程,将它们传递给.metaproj构建文件,但我不知道如何让它们用于VB代码。这是可取的,但在这一点上,我开始怀疑这是可能的。
我已经能够设置一些预处理器常量,在#if#else语句中被识别。
#If DEBUG = True Then
BarStaticItemVersion.Caption = String.Format("Version: {0}", "1.18.0.xxx")
#Else
BarStaticItemVersion.Caption = String.Format("Version: {0}", "1.18.0.133")
#End If
msbuild CalbertNG.sln.metaproj /t:Rebuild /p:DefineConstants="DEBUG=False"
这似乎是工作,但我需要重建更改该常量的值。我需要吗?应该建立足够的?这是正常的,还是表明我没有设置正确的东西?
我已经看到其他一些文章讨论预处理源文件与其他一些建设者,如蚂蚁,但似乎是矫枉过正。感觉就像我在这里。但是我想缩小并从一张干净的纸上问你是否有两个变量需要在每个环境中改变,你使用的是VB.NET,并且你希望将这些变量值合并到一个自动化的VS中团队服务在代码签入时构建过程,最好的方法是什么? (我想在VSTS面板中定义变量,但这只是将它们传递给我的构建器,所以我必须知道如何解析对MSBuild的调用以使它们有用)。
我可以控制2静态字符串,现在,通过编译器指令,但我真的很想引用MSBuild进程中显示给用户的Build.BuildNumber,如果可以这样做,我可以将变量提供给数据库和blob容器通过相同的机制,并跳过预处理器。
我们为每个环境的项目添加配置,并设置转换以设置连接字符串和其他设置。也看看使用SlowCheetah。 – JerryM
您应该使用web.config或app.config来存储环境特定的变量,如连接字符串。 –
我很欣赏使用app.config的建议,但后来我遇到了类似的问题:如何通过msbuild.exe在THAT文件中设置值? –