C# 如何通过MSBuild为Windows服务和Windows应用程序创建简单的基于文件的分发版

C# 如何通过MSBuild为Windows服务和Windows应用程序创建简单的基于文件的分发版,c#,.net,msbuild,package,publish,C#,.net,Msbuild,Package,Publish,首先,感谢您花时间阅读并评论这个问题 摘要 如何使用MSBuild将MS Visual Studio Windows服务和Windows应用程序自动打包到simple(包含DLL、EXE、Config等文件的目录)中我可以将其发布到我们的开发运营部门。我不希望在MSI安装程序或setup.exe或某些web部署格式中发布,这些格式似乎是MS Visual Studio发布中的默认格式 我的环境 Windows XP SP3(32位)、Windows Server 2008 R2(64位) .N

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

摘要

如何使用MSBuild将MS Visual Studio Windows服务和Windows应用程序自动打包到simple(包含DLL、EXE、Config等文件的目录)中我可以将其发布到我们的开发运营部门。我不希望在MSI安装程序或setup.exe或某些web部署格式中发布,这些格式似乎是MS Visual Studio发布中的默认格式

我的环境

  • Windows XP SP3(32位)、Windows 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:\u PackageTempDir=“C:\temp\some\dir”

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

结论

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

  • 使用MSBuild编译代码,使用NAnt创建简单的文件目录(分发)
  • 使用MSBuild编译代码并创建生成后事件以创建分发
  • 你的建议(非常感谢)

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


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

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


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

您可以运行MSBuild以获得所需的内容,只需指定与
包不同的目标即可。我相信你想要“建造”:

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

您可以通过属性自定义生成输出目录,但我记不清该属性名是什么。如果你打开你的csproj文件,你应该能够看到它

您可以运行MSBuild来获取所需的内容,只需指定与
包不同的目标即可。我相信你想要“建造”:

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

您可以通过属性自定义生成输出目录,但我记不清该属性名是什么。如果你打开你的csproj文件,你应该能够看到它

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

对于Windows应用程序,正如飞溅位所建议的那样,在编译项目后,可以将release bin目录的内容用作简单的基于文件的分发

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


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

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

对于Windows应用程序,正如飞溅位所建议的那样,在编译项目后,可以将release bin目录的内容用作简单的基于文件的分发

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


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

Hi Kevin。谢谢你的回复。我们的开发运营团队安装Windows服务-我们与此活动无关