如何通过 C# 代码以编程方式构建解决方案文件?

2024-03-19

我有一个包含许多项目的大型解决方案,其中一个是安装项目。还有许多当前版本存储在单独的分支中。我有一个曾经在 .NET 2 中工作的构建工具,但自从我们升级到 .NET 4 后就不再工作了。

在内部,新的 .NET 4 版本的构建工具使用Microsoft.TeamFoundation.Client.RegisteredTfsConnections.GetProjectCollections() and versionControlServer.GetAllTeamProjects(false)得到一个集合TeamProject来自我的 TFS 源代码控制服务器。

然后,我在 UI 中直观地显示它们,当用户单击特定的解决方案版本时,应用程序将调用以下命令来获取该解决方案版本的最新版本:

workspace.Get(new string[] { serverPath }, VersionSpec.Latest, RecursionType.Full, 
   GetOptions.GetAll);

用于构建解决方案文件的应用程序,其中包括安装项目。在此阶段,安装项目将创建一个可以安装应用程序的 MSI。这是我遇到问题的最后一步。

我需要能够使用 C# 代码以编程方式构建用户选择的解决方案。其工作 .NET 2 代码如下:

Process process = new Process();
ProcessStartInfo processStartInfo = process.StartInfo;
processStartInfo.FileName = processName;
processStartInfo.Arguments = string.Format(" \"{0}\" /BUILD \"Release|Any CPU\"", 
   solutionPath);
processStartInfo.WorkingDirectory = processDirectory;
process.Start();

运行时没有错误,但它不再启动 Visual Studio 并生成代码。显然,这最初是一个糟糕的方法,但我找不到使用 TFS 类的“正确”方法。

我还尝试直接运行 MSBuild.exe(类似于上面的示例),这确实构建了解决方案,但由于某种原因没有构建生成 MSI 的安装项目。请注意,我不使用任何手动创建的构建文件。

不幸的是,很难找到 Microsoft.TeamFoundation 命名空间的有用文档!我希望这里有人已经使用了这些类,并且可以指导我解决这个问题。

如果可能的话,我需要使用 .NET 类(例如,不是 Process.Start),因为我确实需要知道构建何时完成。不过我可以设置一个FileSystemWatcher如果要求过高,则反对。


msbuild 会跳过安装程序项目,因为它不知道如何构建它们。 FinalBuilder 将 devenv.exe 解压出来来构建它们。

调用 `devenv /build "Release|Any CPU" /project "MyInstaller.vdproj" 应该从命令行运行您需要的构建,而无需启动 VS GUI。尝试一下!

话虽如此:我们也使用 FinalBuilder,并且 VS Installer 已被弃用,因此您可能需要计划替换它。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何通过 C# 代码以编程方式构建解决方案文件? 的相关文章

随机推荐

  • jquery-confirm 对话框中的 jQuery UI 日期选择器

    我正在使用下面链接中的 jquery confirm 脚本 它能够在对话框中包含表单字段 您可以通过单击下面链接中的 按提示操作 蓝色按钮来查看此内容 我已经设置了表单 单个字段 但我希望这个输入是一个日期选择器 并且我不知道应该在哪里放置
  • Django Q 查询 & 在同一字段上?

    这是我的模型 class Event models Model user models ForeignKey User blank True null True db index True name models CharField max
  • 下拉菜单中的 jvectormaps,NS_ERROR_FAILURE:

    我的 jvector 地图位于下拉菜单中 它在 safari opera 和 chrome 中运行良好 但会损坏 没有地图 和错误消息 NS ERROR FAILURE 2 0 2 min js 第 700 行 return this no
  • LinkedList不能序列化?

    这是我的课程 http pastebin com 3dc5Vb1t http pastebin com 3dc5Vb1t 当我尝试跑步时 BookStore b new BookStore b LoadFromXML Server MapP
  • 如何替换 Tkinter 应用程序中的图标?

    我在 Windows 10 上使用 Python 3 5 0 并且想要替换它 要更改图标 您应该使用iconbitmap or wm iconbitmap我的印象是您想要将其更改为的文件必须是 ico 文件 import tkinter a
  • C#:GPS跟踪系统[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 如何在 C net 中构建带有移动设备 带 GPS 的 GPS 跟踪系统 场景是 通过支持 GPS 的手机跟踪用户 服务工程师 这里没
  • 保持鼠兔 BlockingConnection 存活而不禁用心跳

    我正在使用 pika 0 10 0 和 python 2 7 版本开发 RabbitMQ 消费者 在我的消费者客户端中 我有一个根据输入消息运行一段时间的进程 时间可能从 3 到 40 分钟不等 我不想禁用心跳 相反 我正在寻找一些回滚机制
  • Ruby on Rails - 简单表单自动完成关联搜索

    我在基本任务管理应用程序中有一个表单 允许将任务分配给用户 任务属于用户 我为此使用简单表格 目前 该关联以典型方式填充 带有用户下拉列表 如下所示 但是 随着用户数量的增长 我希望将其更改为自动完成表单字段以查找用户 我尝试过遵循Rail
  • 使用原生SQL查询时如何指定数据类型?

    我正在使用休眠 我已经编写了本机 SQL 查询 我想指定其中一列的数据类型 如下所示 sqlQuery addScalar NAME STRING 我正在查询 5 列并且ID是其中的一栏 但如果我使用addScalar 它不返回所有列 只返
  • 用于 BLE 的 BluezV5.42 DBUS C API?

    我开发了 BLE 应用程序openwrt using BLUEZV5 30 我能够通过提取源代码来创建应用程序gatttool and hcitool 我还添加了这些工具提供的更多功能 例如阅读rssi 不过 我已经升级了我的bluez堆叠
  • JSON.net - 字段可以是 string 或 List

    我有一种情况JSON从一个返回REST service 返回电影对象列表 所有对象都包含大量信息 其中有几个字段REST 服务结果根据可用信息而变化 举个例子 电影总是有一些屏幕截图 图像 演员和导演 根据所讨论的电影 可能有一张或多张图像
  • Intersection Observer rootMargin 在 x 轴上未按预期工作

    我正在尝试使用交集观察器 API 为一个侧面项目实现图像延迟加载 我面临的问题是 无论我如何调整 x 轴的 rootMargin 例如 0px 300px 0px 0px 交叉点似乎只发生在视口上 预期 在进入视口之前相交 300px 时加
  • 是否可以在 C# 类库中创建 Windows 窗体?

    我一直在用 C 构建 DLL 类库 用作提供自定义 API 的应用程序的附加组件 到目前为止 它们主要包括与数据库 计算 磁盘操作等的接口 我很想知道是否可以在 DLL 类库内构建和显示 Windows 窗体 显示文本框 按钮等 I tri
  • 如果“cargo build”比直接运行 rustc 慢,为什么我应该使用 Cargo?

    我创建了一个简单的 hello world 程序 fn main println Hello world 编译代码时使用rustc vs cargo build 货物命令显得较慢 它需要1 6s for cargo build vs 1s
  • 我们如何在Python中通用地使用sin、cos、tan(包括用户定义的类型)?

    编辑 让我尝试改写并改进我的问题 旧版本附在底部 我正在寻找一种以类型通用的方式表达和使用自由函数的方法 例子 abs x maps to x abs next x maps to x next at least in Python 3 x
  • 如何使用nosetests测试函数是否在函数内被调用

    我正在尝试为项目设置一些自动单元测试 我有一些函数 作为副作用 它们偶尔会调用另一个函数 我想编写一个单元测试来测试第二个函数是否被调用 但我被难住了 下面是伪代码示例 def a self data self get if len dat
  • FIREBASE 警告:无效的查询字符串段:[关闭]

    Closed 这个问题是无法重现或由拼写错误引起 help closed questions 目前不接受答案 我在 Firebase 日志控制台中不断收到这些警告 FIREBASE 警告 无效的查询字符串段 我检查了所有内容 但找不到一些原
  • Reactjs 意外的标记“<”

    我用react redux redux创建了reactjs应用程序 启动reactjs项目时 在索引文件的第13行出现意外的令牌错误 索引文件如下 ERROR in src index js Module build failed Synt
  • VHDL 中的进程是可重入的吗?

    一个进程是否可以连续运行两次或多次VHDL 如果在进程的顺序执行未完成的情况下发生另一个事件 在敏感信号列表上 会发生什么 有可能还是我的VHDL流程中的模型完全错误 进程运行时不会发生任何事件 当进程被事件唤醒时 它会运行到完成 结束进程
  • 如何通过 C# 代码以编程方式构建解决方案文件?

    我有一个包含许多项目的大型解决方案 其中一个是安装项目 还有许多当前版本存储在单独的分支中 我有一个曾经在 NET 2 中工作的构建工具 但自从我们升级到 NET 4 后就不再工作了 在内部 新的 NET 4 版本的构建工具使用Micros