如何自定义网站项目的构建?

Tim*_*ker 5 asp.net msbuild

我们有一些自定义的MS Build脚本,可以在构建时为Web应用程序项目生成代码和配置文件.目前,我们通过覆盖Web项目的.csproj文件中的"BeforeBuild"和"AfterBuild"目标来调用这些构建脚本.但是,在另一个解决方案中,我有一个网站项目,它直接从本地IIS打开,没有.csproj文件.如何自定义此类项目的构建?

如果无法自定义网站的MS Build过程,那么调用像运行我的自定义MS Build脚本的.bat文件这样的东西就足够了.我们目前正在使用.bat文件,但开发人员必须手动运行它,但有时会忘记这一点.点击构建时,我看不到一种简单的方法来自动启动它.

我想在Visual Studio和Team Build中运行作为解决方案构建的一部分的东西.

Dav*_*bbo 5

请注意,与Web应用程序不同,Visual Studio本身并没有真正构建网站。当然,肯定有可以从VS运行的Build命令,但是它所做的基本上只是检查您的站点是否可以正确构建。关键是,从VS构建网站时,它根本不会产生任何构建工件。相反,将http请求发送到站点时,所有需要构建的内容都会在运行时发生。

您可以通过多种方式自定义运行时事物的构建方式(例如,使用Build Providers),但是如果您的目标是生成一个web.config文件,那么这将无济于事。

或者,您可能让您的网站依赖于另一个项目(例如,库),然后让项目代表该网站执行一些自定义生成操作(例如,通过修改该网站的文件)。利用项目依赖关系,可以确保其他项目始终在网站之前构建。

  • +1但是您不必依赖其他项目。您可以仅创建一个自定义MSBuild脚本,以实现“ Build”,“ Rebuild”和“ Clean”目标,并使用* Add Existing Project ... *将其添加为项目依赖项。 (2认同)
  • 对。尽管我在解决方案级别使用了“项目依赖项”来强制执行“构建顺序”,而不是添加引用。 (2认同)

Tim*_*ker 3

现在,我通过在解决方案中添加一个单独的 MS 构建文件并使用 Visual Studio 中的项目依赖项确保它在网站之前构建,已经实现了我所需要的目标。

实际的构建文件非常小,称为“Configure.csproj”,位于网站的根目录中:

<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0" DefaultTargets="Build">
  <Import Project="CodeGeneration.targets" />
  <Target Name="Build">
    <CallTarget Targets="GenerateCode" />
  </Target>
  <Target Name="Rebuild">
    <CallTarget Targets="GenerateCode" />
  </Target>
  <Target Name="Clean">
  </Target>
</Project>
Run Code Online (Sandbox Code Playgroud)

右键单击解决方案并选择“添加现有项目”并选择此文件。

当没有要构建的 C# 时,将其命名为 *.csproj 似乎很奇怪,但当单击“添加现有项目”时,Visual Studio 会识别该文件扩展名。

然后,为了确保它是在网站之前构建的,请右键单击该解决方案并选择“项目依赖项”。从“项目”下拉列表中选择网站项目,然后选中“配置”旁边的框。

当然,可以通过添加另一个项目并添加对网站的依赖项来在网站之后运行自定义构建。

  • 你已经解决了你的问题,但我仍然愿意去获得赏金,*并*改善你的处境。所以在结束之前一定要看看我的答案;) (2认同)