【问题标题】:Using Octopack on a TFS build with a website + windows service在带有网站 + Windows 服务的 TFS 构建上使用 Octopack
【发布时间】:2012-12-24 10:26:08
【问题描述】:

我在单个 Visual Studio 解决方案中拥有一个网站、一个 Windows 服务和一些共享类库。我在网站和 Windows 服务上都使用 Octopack,在我的机器上,这些构建按预期工作。

使用 TFS Build Server 时,网站 nuget 包按预期生成,但 windows 服务 nuget 包包含来自网站的所有文件,以及服务。例如。它还包括 _PublishedWebsites 文件夹。

这是因为 TFS 使用单一位置来构建项目。

解决这个问题的最佳方法是什么?

【问题讨论】:

标签: tfs tfsbuild octopus-deploy


【解决方案1】:

我知道这个问题已经结束,但我发现了这个问题并以不同的方式解决了它。

我的解决方案受到许多网站和 Windows 服务的影响,并且在使用 Team Build 构建时,OctoPack 创建的 nuget 包包括来自“池化”输出文件夹的所有解决方案程序集都存在同样的问题。 nuget 包获取所有程序集的原因是 OctoPack 使用 outdir msbuild 参数作为包含程序集的位置。

我解决它的方法是使用 msbuild 参数GenerateProjectSpecificOutputFolder=true。这指示 Team build 为输出文件夹中的每个项目创建一个文件夹,就像 Visual Studio 在本地构建时使用每个项目下的 bin 文件夹一样。

我的构建定义 msbuild 参数如下所示: /p:GenerateProjectSpecificOutputFolder=true;RunOctoPack=true;OctoPackPublishPackageToFileShare=\\<NugetServer>

我目前只是将包推送到共享文件夹,但也可以使用 OctoPackPublishPackageToHttpOctoPackPublishApiKey 参数。

与上述解决方案相比,此解决方案的好处是您无需指定包含 nuget 包的文件。

希望这对某人有所帮助。

【讨论】:

  • 谢谢。会试一试的。
【解决方案2】:

我最终使用这个 nuget 包来确保控制台应用程序构建到 TFS 服务器上的单独目录中。

https://nuget.org/packages/PublishedApplications/2.1.0.0

然后我必须在 nuspec 文件中指定控制台应用程序应包含哪些文件。例如

这可行,我现在可以使用 Octopus deploy 进行部署。

此方法的缺点是 PublishedApplications 构建仅适用于 TFS 构建服务器,因此我无法在发布模式下在本地构建项目。仍在寻找如何克服这一点。

【讨论】:

  • 如果您有一个问题,即所有标记为Copy AlwaysContent 都被复制到根文件夹而不是分层查看我对此SO article 的回答。
猜你喜欢
  • 1970-01-01
  • 2014-09-03
  • 2014-09-26
  • 2015-10-02
  • 1970-01-01
  • 1970-01-01
  • 2013-11-28
  • 1970-01-01
  • 2017-04-16
相关资源
最近更新 更多