zoukankan      html  css  js  c++  java
  • 使用bat文件发布asp.net程序

    关键 1根据源代码的改动自动下载代码,2编译3发布网站

       1第一步只需要通过CruiseControl.NET就可以做到

        2编译其实就是在ccnet.config中添加一个任务,关键代码  

      

    1. <tasks>  
    2.             <msbuild>  
    3.                 <executable>C:\Windows\Microsoft.NET\Framework\v4.0.30319\Msbuild.exe</executable>  
    4.                 <workingDirectory>$(baseDirectory)$(workingDirectory)$(projectName)\src\PollutantMonitorPlatform\PollutantMonitor</workingDirectory>   
    5.                 <projectFile>$(baseDirectory)$(workingDirectory)$(projectName)\src\PollutantMonitorPlatform\PollutantMonitor\PollutantMonitor\PollutantMonitor.csproj</projectFile>  
    6.                 <buildArgs>/noconsolelogger /p:OutDir=C:\SourceControl\publish\PollutantMonitor\ /v:n</buildArgs>  
    7.                 <targets>Clean;Build;_CopyWebApplication</targets>  
    8.                  <timeout>900</timeout>  
    9.                  <logger>C:\Program Files\CruiseControl.NET\server\ThoughtWorks.CruiseControl.MsBuild.dll</logger>  
    10.              </msbuild>   
    11.              <exec>  
    12.                 <executable>AddApp.bat</executable>  
    13.                 <baseDirectory>C:\Program Files\CruiseControl.NET\server</baseDirectory>  
    14.                 <buildArgs>PollutantMonitor 82 $(baseDirectory)TestWeb\PollutantMonitor "ASP.NET v4.0"</buildArgs>  
    15.                 <buildTimeoutSeconds>10</buildTimeoutSeconds>  
    16.            </exec>               
    17.         </tasks>  
    18.        <publishers>  
    19.            <xmllogger/>  
    20.              <buildpublisher>  
    21.             <sourceDir>$(baseDirectory)$(publishDirectory)PollutantMonitor\_PublishedWebsites</sourceDir>  
    22.             <publishDir>C:\SourceControl\Test\</publishDir>  
    23.             <useLabelSubDirectory>false</useLabelSubDirectory>  
    24.             <alwaysPublish>false</alwaysPublish>  
    25.          </buildpublisher>  
    26.       </publishers>  

     

     

    通过应用msbuild.exe命令行就可以编译,不需要vs的开发环境。

     

      网站项目的命令行如下:

     

    1. C:\Windows\Microsoft.NET\Framework\v3.5\Msbuild.exe F:\download\MSBuildDemo1\MSBuildDemo.sln /t:Clean;Build /p:OutDir=H:\testweb\  

     

       含义就是通过3.5版的Msbuild.exe编译路径F:\download\MSBuildDemo1下的solution文件MSBuildDemo.sln,首先清理,再生成,最后把生成的所有文件复制到目录下H:\testweb\

    web应用程序项目的命令行如下:

     

    1. C:\Windows\Microsoft.NET\Framework\v3.5\Msbuild.exe F:\download\MSBuildDemo\BFL.MSBuildDemo.WebApp\BFL.MSBuildDemo.WebApp.csproj /t:Clean;Build;_CopyWebApplication /p:OutDir=H:\testweb\  

     

       含义就是通过3.5版的Msbuild.exe编译路径F:\download\MSBuildDemo\BFL.MSBuildDemo.WebApp\下的项目文件BFL.MSBuildDemo.WebApp.csproj ,首先清理,再生成,最后把生成的所有文件复制到目录下H:\testweb\

    两种方式都在OutDir下生成了目录_PublishedWebsites,和通过vs右键发布生成的一样。

    如何出现如下错误,需要修改csproj项目文件中的如下一行,需要改变版本,例如把v10.0改为v8.0或者v9.0 

     

    1. <Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />  

     

    1.     C:\Program Files\MSBuild\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets(133,11): error MSB4064: The "Retries" parameter is not supported by the "Copy" task. Verify the parameter exists on the task, and it is a settable public instance property.  
    2.   
    3. C:\Program Files\MSBuild\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets(131,5): error MSB4063: The "Copy" task could not be initialized with its input parameters.   
    4. Done Building Project "F:\download\MSBuildDemo\BFL.MSBuildDemo.WebApp\BFL.MSBuildDemo.WebApp.csproj" (Clean;Build;_CopyWebApplication target(s)) -- FAILED.  
    5.   
    6. Build FAILED.  
    7.   
    8. "F:\download\MSBuildDemo\BFL.MSBuildDemo.WebApp\BFL.MSBuildDemo.WebApp.csproj" (Clean;Build;_CopyWebApplication target) (1) ->  
    9. (_CopyWebApplicationLegacy target) ->   
    10.   C:\Program Files\MSBuild\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets(133,11): error MSB4064: The "Retries" parameter is not supported by the "Copy" task. Verify the parameter exists on the task, and it is a settable public instance property.  
    11.   C:\Program Files\MSBuild\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets(131,5): error MSB4063: The "Copy" task could not be initialized with its input parameters.   
    12.   
    13.   
    14.     0 Warning(s)  
    15.     2 Error(s)  
    16.   
    17.   
    18. Time Elapsed 00:00:00.42  
    19.     

    3发布网站到IIS下
      由于上一步已经生成了发布需要的所有文件,所以这一步就是拷贝文件,设定虚拟目录,就可以了。我使用的是II7,IIS7有一个工具appcmd可以简化发布。

     

     

    1. %windir%\system32\inetsrv\appcmd add app  /site.name:"Default Web Site" /path:/TestWeb /physicalPath:C:\SourceControl\Test\TestWeb\PollutantMonitor   

     

      含义调用appcmd在Default Web Site下添加一个web应用程序,虚拟路径为TestWeb,物理路径为C:\SourceControl\Test\TestWeb\PollutantMonitor 

     

    1. %systemroot%\system32\inetsrv\APPCMD set app "Default Web Site/TestWeb" /applicationPool:"ASP.NET v4.0"  

     

     含义调用appcmd设置Default Web Site/TestWeb web应用程序的运行环境为ASP.NET v4.0

     

    1. %windir%\system32\inetsrv\appcmd delete app  "Default Web Site/TestWeb"   

     含义调用appcmd删除iis下的Default Web Site/TestWeb web应用程序

      通过一个bat文件自动添加应用程序和设置运行版本,文件内容如下:

      重复添加会有错误,目前就是忽略,还没有找到好的方法

     

    1.   if exist %windir%\system32\inetsrv\appcmd.exe (goto AddWeb)  else (goto NOappcmd)   
    2.    :AddWeb   
    3.  echo 添加网站  
    4.  %windir%\system32\inetsrv\appcmd add site  /name:%1 /bindings:http/*:%2: /physicalPath:%3  
    5.    if %errorlevel% equ  0 goto success    
    6.    if %errorlevel% gtr  0 goto failed    
    7.   
    8.    :failed  
    9.   echo 获得错误返回码为%errorlevel%  
    10.       echo 添加网站failed  
    11.   goto end      
    12. :success         
    13.   echo 添加网站successed  
    14.   echo 获得返回码为%errorlevel%  
    15.   echo 设置dotnet版本,启动网站  
    16.    %systemroot%\system32\inetsrv\APPCMD set app %1"/" /applicationPool:%4  
    17.    %systemroot%\system32\inetsrv\APPCMD start site %1  
    18.  goto end  
    19.  :NOappcmd  
    20. echo %windir%\system32\inetsrv\appcmd.exe is not exist    
    21.   
    22. :end  



     

     

     需要注意的是以上命令需要有管理员的权限,否则就会出错

    参考文章

    使用 MSBuild 以特定的 NET Framework 为目标

    MSBuild Task Reference

    使用MSBuild自动编译发布你的ASP.NET应用程序

    重启IIS命令行iisreset

    如何使用 Appcmd.exe 命令行工具启用和配置 Internet Information Services 7.0 中的 HTTP 日志记录和其他功能

    IIS(IISReset.exe)命令行

    Create a Web Site (IIS 7)

    Configuring-IIS-7-command-line-Appcmdexe

    Getting Started with AppCmd.exe

  • 相关阅读:
    IP地址和进制转换
    Cisco交换机常见配置
    macOS上的autoreconf错误导致无法安装问题
    LG P5147 随机数生成器
    LG P1879 [USACO06NOV]Corn Fields G
    LG P5017 [NOIP2018]摆渡车
    mysql触发器trigger详解
    MybatisPuls中QueryWrapper的select、update的用法
    @Transactional各属性详解
    Linux如何查看进程、杀死进程、启动进程等常用命令(包括常用的命令,如查看文件,修改文件读写权限、寻找文件等)
  • 原文地址:https://www.cnblogs.com/Minghao_HU/p/2549659.html
Copyright © 2011-2022 走看看