Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 2010 自动发布Visual Studio 2010功能?_Visual Studio 2010_Build Process_Build Automation_Publishing Site - Fatal编程技术网

Visual studio 2010 自动发布Visual Studio 2010功能?

Visual studio 2010 自动发布Visual Studio 2010功能?,visual-studio-2010,build-process,build-automation,publishing-site,Visual Studio 2010,Build Process,Build Automation,Publishing Site,我读过一些关于自动化构建过程的文章,但是,我感兴趣的不仅仅是构建过程,而是发布 我有几个使用基本模型的网站和服务。当我更改该模型时(这不会经常发生),所有站点/服务都必须重建并发布到相应的目标目录(已经包含在配置中) 所有项目文件夹都存在于一个文件夹中 我正在考虑的方法是使用MSBuild从主文件夹运行脚本,其中包含要生成/发布的项目的命名列表 我发现了一个为MSBuild创建构建脚本的好例子,但是,这只满足一个项目的构建 我将如何让流程通过项目/目录的命名列表来执行相同的构建/发布脚本 谢谢。

我读过一些关于自动化构建过程的文章,但是,我感兴趣的不仅仅是构建过程,而是发布

我有几个使用基本模型的网站和服务。当我更改该模型时(这不会经常发生),所有站点/服务都必须重建并发布到相应的目标目录(已经包含在配置中)

所有项目文件夹都存在于一个文件夹中

我正在考虑的方法是使用MSBuild从主文件夹运行脚本,其中包含要生成/发布的项目的命名列表

我发现了一个为MSBuild创建构建脚本的好例子,但是,这只满足一个项目的构建

我将如何让流程通过项目/目录的命名列表来执行相同的构建/发布脚本

谢谢。

使用带有自定义元数据的
元素,结果如下:

   <ItemGroup>
      <ProjectToPublish Include="WebApplication1\WebApplication1.csproj" >
                <OutputDir>OutputDir1</OutputDir>
      </ProjectToPublish>
      <ProjectToPublish Include="WebApplication2\WebApplication2.csproj" >
                <OutputDir>OutputDir2</OutputDir>
      </ProjectToPublish>
   </ItemGroup>

   <Target Name="Publish" Inputs="@(ProjectsToPublish)" Outputs="%(Identity).Dummy">
      <RemoveDir Directories="%(OutputDir)" ContinueOnError="true" />
      <MSBuild Projects="%(Identity)"
         Targets="ResolveReferences;_CopyWebApplication"
         Properties="WebProjectOutputDir=$(OutputDir);
         OutDir=%(OutputDir)\" />
   </Target>

OutputDir1
OutputDir2

所以我终于有时间再看一次

我创建了以下MSBuild脚本,该脚本位于与我拥有的所有网站相同级别的文件夹中

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">


  <Target Name ="DeleteFiles">
    <Delete Files="..\$(ProjectName)\$(ProjectName)\obj\debug\$(ProjectName).dll"></Delete>
    <Delete Files="..\$(ProjectName)\$(ProjectName)\obj\release\$(ProjectName).dll"></Delete>
    <Delete Files="..\$(ProjectName)\$(ProjectName)\bin\$(ProjectName).dll"></Delete>
    <Delete Files="..\$(ProjectName)\$(ProjectName)\bin\$(ProjectName).pdb"></Delete>
  </Target>

  <Target Name="Compile" DependsOnTargets="DeleteFiles">
    <MSBuild Projects="..\$(ProjectName)\$(ProjectName)\$(ProjectName).csproj"
      Targets="Clean;Build"
      Properties="OutputPath=..\$(ProjectName)\bin"/>
  </Target>

  <Target Name="Deploy" DependsOnTargets="Compile">
    <MSBuild Projects="..\$(ProjectName)\$(ProjectName)\$(ProjectName).csproj"
        Targets="ResolveReferences;_CopyWebApplication"
        Properties="OutDir=C:\inetpub\wwwroot\$(ProjectName)\bin\;WebProjectOutputDir=C:\inetpub\wwwroot\$(ProjectName)" />
  </Target>


</Project>

这就是所谓的:

msbuild build.xml/p:ProjectName=“websitetopublish.com”/v:n

对于一个站点来说效果很好,但是我想要一个与批处理相关的解决方案,可以读取文本文件。对于该文本文件中的每个条目,执行生成过程


我很容易编写一个.Net控制台应用程序来实现这一点,但有些过分,我想知道如何在批处理文件中使用一些for循环机制来实现这一点。

最终的可重用解决方案如下所示

概述:

我有几个网站在根文件夹谁的目录和项目文件名都命名为网站的价值。我希望能够从命令行发布所有站点(或选定列表)-运行脚本。然后将这些网站发布到我的IIS服务器目录中

首先,创建一个接受网站名称参数的MSBuild脚本:

<?xml version="1.0" encoding="utf-8" ?>
<Project DefaultTargets="Compile,Deploy" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

  <Target Name ="DeleteFiles">
    <Delete Files="..\$(ProjectName)\$(ProjectName)\obj\debug\$(ProjectName).dll"></Delete>
    <Delete Files="..\$(ProjectName)\$(ProjectName)\obj\release\$(ProjectName).dll"></Delete>
    <Delete Files="..\$(ProjectName)\$(ProjectName)\bin\$(ProjectName).dll"></Delete>
    <Delete Files="..\$(ProjectName)\$(ProjectName)\bin\$(ProjectName).pdb"></Delete>
  </Target>

  <Target Name="Compile" DependsOnTargets="DeleteFiles">
    <MSBuild Projects="..\$(ProjectName)\$(ProjectName)\$(ProjectName).csproj"
      Targets="Clean;Build"
      Properties="OutputPath=..\$(ProjectName)\bin"/>
  </Target>

  <Target Name="Deploy" DependsOnTargets="Compile">
    <MSBuild Projects="..\$(ProjectName)\$(ProjectName)\$(ProjectName).csproj"
        Targets="ResolveReferences;_CopyWebApplication"
        Properties="OutDir=C:\inetpub\wwwroot\$(ProjectName)\bin\;WebProjectOutputDir=C:\inetpub\wwwroot\$(ProjectName)" />
  </Target>

</Project>
最后,创建一个批处理文件,该文件在sites.txt中包含的列表中进行迭代,并执行MSBuild脚本:

@echo --------------------------------------------
@echo --  Iterating through list in sites.txt  --
@echo --------------------------------------------
for /f %%X in (sites.txt) do msbuild build.xml /p:ProjectName="%%X" /v:n
此解决方案位于根目录中与其他网站位于同一级别的目录中,这就是为什么在构建脚本中出现“.\$(ProjectName)”


发布大量网站的好方法,希望这对其他人有所帮助。

您考虑过创建解决方案吗?MSBuild也知道如何构建它们。这让我走上了另一条道路。。。我会检查的,谢谢。您好……我尝试过这样做,但出现了一些错误,因为“错误MSB4057:项目中不存在目标“Compile,Deploy”。。。我试着找,但找不到太多你也遇到过同样的情况吗
@echo --------------------------------------------
@echo --  Iterating through list in sites.txt  --
@echo --------------------------------------------
for /f %%X in (sites.txt) do msbuild build.xml /p:ProjectName="%%X" /v:n