问题标签 [msbuild]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
asp.net - 如何使用 MSBuild 发布 Asp.NET Web 应用程序?
我正在尝试使用 NAnt 和 MSBuild 在本地发布 Asp.net MVC Web 应用程序。这就是我用于我的 NAnt 目标的方法;
我得到的只是作为回应;
是否可以通过这种方式通过命令行发布 Web 应用程序?
msbuild - 是否可以从 Mono 的命令行构建 MSBuild 文件(visual studio sln)?
是否可以构建 Visual Studio 解决方案而无需启动 MonoDevelop?
version-control - 管理构建版本的最佳构建过程解决方案
我运行一个包含多个独立应用程序的相当复杂的项目。然而,这些使用了几个共享组件。所以我有一个类似于下面的源代码树。
- 我的项目
- 应用 A
- 共享1
- 共享2
- 应用 B
- 应用 C
所有应用程序都有自己的 MSBuild 脚本,用于构建项目及其所需的所有共享资源。我还在 CruiseControl 控制的持续集成构建服务器上运行这些构建。
部署应用程序时,它们会部署在多台服务器上以分配负载。这意味着跟踪每个不同服务器上部署的构建/修订版本非常重要(我们需要在 DLL 版本中包含当前版本,例如“1.0.0.68”)。
同样重要的是能够重新创建一个已构建的修订/构建,以便在某些事情没有按预期工作时能够回滚(哦,是的,那发生了......)。今天我们使用 SourceSafe 进行源代码控制,但如果我们能提出充分的理由,这可能会改变(SS,到目前为止它实际上对我们来说工作正常)。
我们尝试遵循的另一个原则是,只有由我们进一步部署的集成服务器构建和测试的代码。
“CrusieControl 构建标签”解决方案
我们对解决上述问题有几个想法。第一个是让持续集成服务器构建并在本地部署项目并对其进行测试(现在可以这样做)。您可能知道 CruiseControl 中的成功构建会生成一个构建标签,我想我们可以用它来设置可执行文件的 DLL 版本(所以构建标签 35 会创建一个类似“1.0.0.35”的 DLL)?这个想法也是使用这个构建标签来标记完整的源代码树。然后我们可能可以通过该标签检查并稍后重新创建构建。
标记完整树的原因是不仅包括实际的应用程序代码(位于源代码树中的一个位置),还包括所有共享项(位于树中的不同位置)。因此,“Application A”的成功构建将使用标签“ApplicationA35”标记整个树。
但是,在部署之前尝试重新创建此构建并设置 DLL 版本时可能会出现问题,因为我们将无法再访问 CruiseControl 生成的构建标签。如果所有项目的所有 CrusieControl 构建标签都是唯一的,我们可以只使用编号进行标签,但情况并非如此(应用程序 A 和 B 可以同时在构建 35 上)所以我们必须在标签。因此 SourceSafe 标签为“Application35”。一旦我们构建了构建 35,我如何重新创建构建 34 并将 1.0.0.34 设置为 DLL 版本号?
“修订号”解决方案
有人告诉我,例如 Subversion 会在每次签入时为整个源代码树创建一个修订号——是这样吗?SourceSafe 有类似的东西吗?如果这是正确的,那么想法是在获取最新版本时获取该修订号并在 CruiseControl 服务器上构建。然后可以使用修订号来设置 DLL 版本号(例如“1.0.0.5678”)。我想如果需要,我们可以为 Subversion 获得这个特定的修订,然后将包括该应用程序和所有共享项目,以便能够从过去重新创建特定版本。这会起作用吗?这是否也可以使用 SourceSafe 来实现?
总结
所以两个主要要求是:
- 能够跟踪构建和部署的 DLL 的构建/修订号。
- 能够重建过去的修订/构建,在该构建的可执行文件上设置旧的构建/修订号(以符合要求 1)。
那么你将如何解决这个问题?您首选的方法是什么,您将如何解决它(或者您有完全不同的想法?)?**请给出详细答案。**
奖励问题修订号和内部版本号之间有什么区别,什么时候真正需要两者?
.net - MSBuild ItemGroup,不包括 .svn 目录和文件
如何构造一个 MSBuild ItemGroup 以排除 .svn 目录和(递归)其中的所有文件。我有:
目前,但这并不排除任何事情!
visual-studio - 为每个用户执行不同的 MSBuild 任务集?
在我们的开发环境中,每个开发人员都有自己的开发服务器。很多时候,他们实际上并没有在该服务器上进行开发,而是从他们的本地机器开发,部署到他们的开发服务器,然后附加远程调试器进行调试。
我的问题是;如何使用 MSBuild 为每个用户执行一组不同的任务?
我想让每个用户都可以使用 MSBuild 任务定义自己的构建过程,但我不希望这必然影响其他开发人员。如果给定用户明确定义了自己的流程,我还希望执行一组默认任务。
例子:
- SomeProj.csproj
- 默认 MS Build 过程是复制到测试服务器或登台服务器
- Steve 的自定义流程是复制到 Steve 的开发服务器
- Eric 的自定义流程是复制到 Eric 的开发服务器
visual-studio - 任何好的 PowerShell MSBuild 任务?
任何人都知道将执行 PowerShell 脚本并传递不同参数的任何好的 MSBuild 任务吗?
我能够找到B# .NET 博客:Invoking PowerShell scripts from MSBuild,但我希望得到一些更精致的东西。
如果我找不到任何东西,我当然会继续使用该博客文章作为入门来完善我自己的内容。
visual-studio - 在 Visual Studio 中显示构建时间?
我们的构建服务器花费了太长时间来构建我们的 C++ 项目之一。它使用 Visual Studio 2008。有什么方法可以让 devenv.com 记录在解决方案中构建每个项目所花费的时间,以便我知道应该将精力集中在哪里?
在这种情况下,改进硬件不是一种选择。
我尝试设置输出详细程度(在工具/选项/项目和解决方案/构建和运行/MSBuild 项目构建输出详细程度下)。这在 IDE 中似乎没有任何影响。
从命令行运行 MSBuild 时(对于 Visual Studio 2008,它需要是 MSBuild v3.5),它会在最后显示经过的总时间,但不会在 IDE 中显示。
我真的很想为解决方案中的每个项目提供一份耗时的报告,以便我可以弄清楚构建过程在哪里花费了时间。
或者,由于我们实际上使用 NAnt 来驱动构建过程(我们使用 Jetbrains TeamCity),有没有办法让 NAnt 告诉我每个步骤所用的时间?
excel - 使用 MSBuild 更改 .xla 文件
我正在尝试为我当前的项目创建一个构建脚本,其中包括一个 Excel 插件。加载项包含一个带有文件 modGlobal 和变量 version_Number 的 VBProject。每次构建都需要更改此数字。具体步骤:
- 使用 Excel 打开 XLA 文档。
- 切换到 VBEditor 模式。(Alt+F11)
- 打开 VBProject,输入密码。
- 打开 modGlobal 文件。
- 将变量的默认值更改为当前日期。
- 关闭并保存项目。
我不知道如何自动化这个过程。我能想到的最好的方法是一个 excel 宏或 Auto-IT 脚本。我也可以编写一个自定义的 MSBuild 任务,但这可能会变得……很棘手。还有其他人有其他建议吗?
tfs - TFSBuild.proj 和导入外部目标
我们希望将覆盖的构建目标存储在外部文件中,并将该目标文件包含在 TFSBuild.proj 中。我们有一组核心步骤发生,并且希望通过简单地将导入行添加到向导创建的 TFSBuild.proj 来获得这些额外的步骤。
我们无法对 中的任何文件进行导入,$(SolutionRoot)
因为在验证 Import 语句时,尚未从存储库中获取源。看起来 TFS 正在拉下第TFSBuild.proj
一个没有任何其他文件的文件。
即使我们添加条件导入,如果存在源代码管理中的版本,也不会被导入。将导入磁盘上已存在的先前版本。
我们可以放弃将这些构建目标与我们的源代码一起存储,但它是第一个从源代码树中移出的依赖项,因此我们不愿意这样做。
有没有办法:
- 告诉 Team Build 拉下更多文件,以便
Import
正确评估这些语句? - 以除?
AfterCompile
之外的方式覆盖那些 Team Build 目标。Import
- 最终在 Team Build 中运行构建目标,这些目标保存在它试图构建的源代码下?
tfs - 如何更改 MSBuild 在 Team Foundation Build 下使用的构建目录?
尝试使用 Team Foundation Build 构建我的应用程序时出现以下错误:
C:\WINDOWS\Microsoft.NET\Framework\v3.5\Microsoft.Common.targets(1682,9):错误 MSB3554:无法写入输出文件“obj\Release\Company.Redacted.BlahBlah.Localization.Subsystems. Startup_Shutdown_Processing.StartupShutdownProcessingMessages.de.resources”。指定的路径、文件名或两者都太长。完全限定的文件名必须少于 260 个字符,目录名必须少于 248 个字符。
我的项目在我的开发机器上构建良好,因为源只有两个文件夹深,但 TF Build 似乎使用了一个非常深的目录,导致它中断。如何更改使用的文件夹?
编辑:我检查了存储在源代码管理中的构建的 .proj 文件,发现以下内容:
如果这是存储在数据库中,我该如何更改它?
编辑:找到以下博客文章,它可能指向我的解决方案。现在我只需要弄清楚如何更改 Build Agent 中的设置。 http://blogs.msdn.com/jpricket/archive/2007/04/30/build-type-builddirectorypath-build-agent-working-directory.aspx
目前我的工作目录是“$(Temp)\$(BuildDefinitionPath)”,但现在我不知道有哪些通配符可用于指定不同的文件夹。