【问题标题】:Try to Automate the Build Process for C# Solution through user click尝试通过用户单击自动化 C# 解决方案的构建过程
【发布时间】:2013-05-07 16:09:54
【问题描述】:

我尝试通过单击按钮建立一个流程,我可以在其中进行以下活动。

目标

  1. 从 SVN 下载最新代码。
  2. 构建 2 组代码以创建 dll 和 exe- (a)Release模式下的Web应用 (b)调试模式下的独立应用程序
  3. 然后替换配置文件中的一些键值。
  4. 然后将它们放置到特定位置。

到目前为止的步骤

创建了 demo.bat 文件,它将为 Standalone 构建 exe 和 dll,如下所示


REM * ============================Starting Setup for Standalone======================================
SET Folder= C:\Automating\Application\Source\StandaloneApp\

cd %Folder%App1
msbuild /property:Configuration=Debug App1.csproj /t:clean /t:build

cd %Folder%App2
msbuild /property:Configuration=Debug App2.csproj /t:clean /t:build

del /F /S /Q /A %Folder%Setup\*.*

XCOPY %Folder%App1\bin\Debug\*.* %Folder%Setup\*.* /S /Y /F /Q
XCOPY %Folder%App2\bin\Debug\*.* %Folder%Setup\*.* /S /Y /F /Q

创建另一个 bat 文件 demo1.bat 将命令提示符更改为 VS2010 cmd 提示符


%comspec% /k ""c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat"" x86
%comspec% /k ""C:\Automating\BuildAuto\BuildAutomation\demo.bat""

创建了一个 cmd 文件以从 svn 下载


TortoiseProc.exe /command:export /URL:[URL path] /Path:"C:/Automating/Demo"

最后是一个 Web 应用程序,用户可以单击按钮按照 svnExport.bat 进行下载,并按照 demo1.bat 构建下载的代码。


protected void Button2_Click(object sender, EventArgs e) {
 ProcessStartInfo psi = new ProcessStartInfo(@"C:\AutomatingPOC\BuildAuto\BuildAutomation\demo1.bat");
            psi.UseShellExecute = false;
            psi.RedirectStandardOutput = false;
            psi.CreateNoWindow = false;
            Process.Start(psi);
}

下载事件正常工作,但构建不工作。我需要有关如何构建代码的帮助

【问题讨论】:

    标签: c# .net batch-file msbuild build-automation


    【解决方案1】:

    为什么要重新发明轮子?使用可用的工具,例如 TeamCitymsbuild(还有很多其他选择)。 我发现尤金做了一个很好的介绍here

    人们花费了数年的时间来开发和完善构建自动化工具。如果我是你,我会停下来看看周围。

    【讨论】:

    • 公平地说,没有什么比尝试自己制作更能让您理解或欣赏工具了:)
    • @Oleksii - 感谢您的建议。 msbuild 写在 demo.bat 文件中。我错过了什么
    • 我没有收到任何错误消息。由于 "%comspec% /k ""c:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\vcvarsall.bat"" x86 ",它只是显示了带有 msbuild 实用程序可用性的 cmd 提示
    【解决方案2】:

    如果您将 psi.UserShellExecute 设置为 false,那么您需要指定要执行的命令实际上是“cmd.exe”并且批处理文件是一个参数。您还必须管理发出请求与实际完成构建之间的延迟。

    【讨论】:

    • 我试着按照你说的去做。以下是为事件完成的代码更改。但是由于这个 ProcessStartInfo psi = new ProcessStartInfo(@"C:\AutomatingPOC\BuildAuto\BuildAutomation\demo1.bat"); 仍然没有开始构建过程。 psi.UseShellExecute = 假; psi.RedirectStandardOutput = 假; psi.CreateNoWindow = 假; psi.Arguments = @"%comspec% /k C:\AutomatingPOC\BuildAuto\BuildAutomation\demo.bat"; Process.Start(psi);
    • 不,你错过了一些东西。了解您要运行的进程与该进程的参数之间的区别。从这段代码来看,您并不完全理解为什么要构造或填充 ProcessStartInfo。 msdn.microsoft.com/en-us/library/…
    • @vicage 可能是权限问题。您需要授予用户(运行 Web 应用程序的权限)特殊权限才能执行代码。默认情况下,由于安全问题,您不能这样做。尝试启动一个空的命令行应用程序,看看它是否有效。
    【解决方案3】:

    使用自动热键可以轻松完成此类任务的自动化。要自动下载,您可以使用开始命令和您选择的浏览器类型 IE Firefox iexplore chrome ~ 然后您可以自动下载。但请注意,某些网站的页码可能会更改 IE。此地址具有指定的页码:

    Try to Automate the Build Process for C# Solution through user click

    所以不要将常规地址放入批次或您选择使用的任何内容中,您可以放入

    https://stackoverflow.com/questions/********

    允许它查找信息

    或者您可以使用鼠标/键盘记录器来自动执行任务。

    【讨论】:

    • 信息日志不是必需的。这就是我在下面添加的原因。 psi.RedirectStandardOutput = false;
    • 使用自动热键可以轻松完成此类任务的自动化。
    猜你喜欢
    • 2019-03-10
    • 2022-08-09
    • 1970-01-01
    • 2012-12-08
    • 2012-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多