【问题标题】: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>
我目前只是将包推送到共享文件夹,但也可以使用 OctoPackPublishPackageToHttp 和 OctoPackPublishApiKey 参数。
与上述解决方案相比,此解决方案的好处是您无需指定包含 nuget 包的文件。
希望这对某人有所帮助。
【解决方案2】:
【讨论】:
-
如果您有一个问题,即所有标记为Copy Always 的Content 都被复制到根文件夹而不是分层查看我对此SO article 的回答。