gpt4 book ai didi

tfs - 在 MSBuild 中包含项目之外的文件

转载 作者:行者123 更新时间:2023-12-04 20:05:16 25 4
gpt4 key购买 nike

我在 StackOverflow 上找到了解决我遇到的问题的其他帖子,例如:

MSBuild: Deploying files that are not included in the project以及 Include Files in MSBuild that are not a part of the project
我想分享我在阅读这些帖子后能够创建的代码,并就为什么它可能无法正常工作寻求帮助?

详细说明什么是没有错的以及我打算做什么。我正在使用 Visual Studio 2012 和 TFS 2012。

我有一个名为 CreateMyFiles.bat 的批处理文件,我想做的是执行它,然后获取它输出的文件(它将它们输出到我的 Includes/Javascript/Bundled 文件夹)并将它们包含在 MSBuild 中的构建中(以便将它们部署到目标 IIS 服务器)。

当我在本地 Visual Studio 中编辑本地 .csproj 并将下面的代码添加到文件底部并重新加载时,我能够右键单击我的 web 项目,选择“发布”,然后选择我的本地基于文件发布配置文件确实将我的文件部署到正确的位置。有效!

然后我将我的代码 checkin 到 TFS,然后转到 TFS 上的“构建”,并将新构建排入队列。果然,我能够看到文件输出到构建服务器上的同一目录。现在,我对 MSBuild 不是 100% 确定,但我注意到就像我在本地发布时一样,它也在构建服务器上创建了一个 _publishedWebsite 文件夹(源代码上方的一个目录)。问题是,在这个发布的网站文件夹中,我手动创建的文件不存在。此外,不幸的是,在构建完成后访问目标 Web 服务器没有我想要的文件。

所以看起来如果我要手动选择发布,下面的代码可以工作,但如果我要使用 TFS 排队构建,它就不起作用。 MSBuild 是否使用发布?这可能是它在下面不起作用的原因吗?

这是我放在 .csproj 文件中的代码:

<Target Name="CustomCollectFiles">
<Exec Command="CreateMyFiles.bat" /> <!-- Generate Files -->
<ItemGroup>
<!-- Create an identity called _CustomFiles, and associate it to the files I created -->
<_CustomFiles Include="Includes\JavaScript\Bundled\*" />
<FilesForPackagingFromProject Include="%(_CustomFiles.Identity)">
<DestinationRelativePath>Includes\JavaScript\Bundled\*%(Filename)%(Extension) </DestinationRelativePath>
</FilesForPackagingFromProject>
</ItemGroup>
</Target>

<!-- Hook into the pipeline responsible for gathering files and tell it to add my files -->
<PropertyGroup>
<CopyAllFilesToSingleFolderForPackageDependsOn>
CustomCollectFiles;
$(CopyAllFilesToSingleFolderForPackageDependsOn);
</CopyAllFilesToSingleFolderForPackageDependsOn>

<CopyAllFilesToSingleFolderForMsdeployDependsOn>
CustomCollectFiles;
$(CopyAllFilesToSingleFolderForPackageDependsOn);
</CopyAllFilesToSingleFolderForMsdeployDependsOn>
</PropertyGroup>

我真的坚持这一点,并想就为什么文件可能无法运行寻求一些帮助。我怀疑 MSBuild 不使用发布,这就是它在本地工作的原因(因为我选择发布)?

非常感谢你的帮助

更新
根据下面的评论尝试了这个,但是这次文件甚至没有出现(所以它现在似乎甚至没有运行任务)。知道为什么吗?我输入对了吗?
<Target Name="CustomCollectFiles">
<Exec Command="CreateMyFiles.bat" />

<!-- Generate Files -->
<ItemGroup>
<!-- Create an identity called _CustomFiles, and associate it to the files I created -->
<_CustomFiles Include="Includes\JavaScript\Bundled\*" />
<FilesForPackagingFromProject Include="%(_CustomFiles.Identity)">
<DestinationRelativePath>Includes\JavaScript\Bundled\*%(Filename)%(Extension) </DestinationRelativePath>
</FilesForPackagingFromProject>
</ItemGroup>
</Target>

<!-- Hook into the pipeline responsible for gathering files and tell it to add my files -->
<PropertyGroup>
<PipelineCollectFilesPhaseDependsOn>
CustomCollectFiles;
$(PipelineCollectFilesPhaseDependsOn);
</PipelineCollectFilesPhaseDependsOn>
</PropertyGroup>

更新 2
当我将上面的代码放入我的 pubxml 文件中,然后执行实际发布时,它可以工作,但据我所知,我们的过程只是将来自 TFS 的构建排队。简单地排队构建时是否可以 Hook 到上述代码块?还是我需要发布?

最佳答案

要从 TFS 构建发布,您需要添加以下参数

/p:DeployOnBuild=true;PublishProfile=Release

显然使用您自己的 PublishProfile 名称

关于tfs - 在 MSBuild 中包含项目之外的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26193276/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com