我在单个 Visual Studio 解决方案中有一个网站、一个 Windows 服务和一些共享类库。我在网站和 Windows 服务上都使用 Octopack,在我的机器上,这些构建按预期工作。
使用 TFS Build Server 时,网站 nuget 包按预期生成,但 windows 服务 nuget 包包含来自网站的所有文件,以及服务。例如,它还包括 _PublishedWebsites 文件夹。
这是因为 TFS 使用单个位置来构建项目。
解决这个问题的最佳方法是什么?
我在单个 Visual Studio 解决方案中有一个网站、一个 Windows 服务和一些共享类库。我在网站和 Windows 服务上都使用 Octopack,在我的机器上,这些构建按预期工作。
使用 TFS Build Server 时,网站 nuget 包按预期生成,但 windows 服务 nuget 包包含来自网站的所有文件,以及服务。例如,它还包括 _PublishedWebsites 文件夹。
这是因为 TFS 使用单个位置来构建项目。
解决这个问题的最佳方法是什么?
我知道这个问题已经被关闭,但我遇到了这个问题并以不同的方式解决了它。
我的解决方案受到许多网站和 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
and参数。OctoPackPublishApiKey
与上述解决方案相比,此解决方案的好处是您无需指定要包含 nuget 包的文件。
希望这可以帮助某人。
我最终使用这个 nuget 包来确保控制台应用程序构建到 TFS 服务器上的单独目录中。
https://nuget.org/packages/PublishedApplications/2.1.0.0
然后我必须在 nuspec 文件中指定控制台应用程序应包含哪些文件。例如
这可行,我现在可以使用 Octopus deploy 进行部署。
这种方法的缺点是 PublishedApplications 构建仅适用于 TFS 构建服务器,因此我无法在发布模式下本地构建项目。仍在寻找如何克服这一点。