2

首先,感谢您花时间阅读并可能评论这个问题。

概括

如何使用 MSBuild 自动将 MS Visual Studio Windows 服务和 Windows 应用程序打包成简单的(包括 dll、exe、配置等的文件目录),我可以将其发布到我们的 Dev-Ops 部门。我不希望以 MSI 安装程序或 setup.exe 或某些 Web 部署格式分发,这些格式似乎是 MS Visual Studio 发布中的默认设置。

我的环境

  • Windows XP SP3(32 位)、Window Server 2008 R2(64 位)
  • .NET 4.0(32 位)
  • MS Visual Studio 2010(32 位)
  • NAnt 0.91(32 位)

我的情景

目前,我们有大约 5 种类型的 MS Visual Studio 项目,对于前 3 种类型(Web 服务、Web 应用程序、网站),我们可以使用 MSBuild 根据内容将源打包到一个简单的文件目录(分发)中csproj 文件使用:

msbuild my.component.csproj /p:Configuration=Release /t:Package /p:_PackageTempDir="C:\temp\some\dir"

对于后两种类型(Windows 服务、Windows 应用程序),我们不能像上面那样使用 MSBuild。通过 Visual Studio 中的 Publish 命令进行调查,看来我可以为 Windows 服务和 Windows 应用程序创建 setup.exe 安装程序,但这不是我想要的 - 我只想能够创建一个简单的文件目录(分发) 就像我为其他项目类型所做的那样。我接受这可能是不可能的,但我只想确定。

结论

到目前为止,对于 Windows 服务和 Windows 应用程序,我得出以下结论,前两者并不理想:

  • 使用 MSBuild 编译代码并使用 NAnt 创建简单的文件目录(分发)。
  • 使用 MSBuild 编译代码并创建构建后事件以创建分发。
  • 您的建议在这里(非常感谢)。
4

3 回答 3

0

首先,.Net 托管的 Windows 服务,就像它们的非托管服务一样,必须通过名为 InstallUtil 的命令行工具向 Windows 服务控制器注册。对于各种 .Net Framework 版本,此实用程序有不同的版本。您会在安装 .Net 框架的位置找到它们。例如,在我的开发框中,它们位于 C:\Windows\Microsoft.NET\Framework 的各个框架子文件夹下。

其次,也许您可​​以澄清您在 Windows 应用程序发行版中看到的具体问题。这些通常与网站和 Web 服务一样简单的文件分发一样容易完成。

于 2012-09-04T14:55:40.940 回答
0

你可以运行 MSBuild 来获得你想要的,你只需要指定一个不同于Package. 我相信您想要“构建”:

msbuild my.component.csproj /p:Configuration=Release /t:Build 

您可以通过属性自定义构建输出目录,但我不记得该属性名称是什么。如果你破解打开你的 csproj 文件,你应该可以看到它。

于 2012-09-05T13:54:07.237 回答
0

根据我在 StackOverflow 上的在线研究 (MSDN) 和有限的本地实验,似乎无法以类似于 MSBuild 的 package 命令的分发输出的方式快速或轻松地构建 Windows 服务和 Windows 应用程序,即基于本地文件的分发。

对于 Windows 应用程序,正如 Splattered Bits 所建议的,在项目编译后,release bin 目录的内容可以用作简单的基于文件的分发。

对于 Windows 服务,可以执行我们上面对 Windows 应用程序所做的操作,并使用 release bin 目录的输出。

在这两种情况下,可能需要更改 CSPROJ 文件以禁止创建 PDB 文件或进一步配置编译输出。

于 2012-09-13T11:06:50.660 回答