ASP.NET MVC 使用MSBuild生成的几个注意事项
做新项目,当时参考NopCommerce的结构,后台Nop.Admin是一个独立的Area Web Site,但部署的时候发现,使用一键发布,Admin Area会丢失。

研究了下NopCommerce的做法,使用MSBuild组织文件结构,关键的地方在下面:
<!--Now lets publish Nop.Admin-->
<MSBuild Projects="$(RootFolder)\Presentation\Nop.Web\Administration\Nop.Admin.csproj"
Targets="ResolveReferences;_CopyWebApplication"
Properties="WebProjectOutputDir=$(DeployFolder)\$(DeployPrefix)\Administration\;
OutDir=$(DeployFolder)\$(DeployPrefix)\Administration\bin\;Configuration=$(Configuration)" /> <!--Now lets move the Nop.Admin/bin/ to the root bin/-->
<CreateItem Include="$(DeployFolder)\$(DeployPrefix)\Administration\bin\*.dll">
<Output TaskParameter="Include" ItemName="CompileOutput" />
</CreateItem>
<Copy SourceFiles="@(CompileOutput)"
DestinationFolder="$(DeployFolder)\$(DeployPrefix)\bin\" /> <!--Lets delete the bin in Nop.Admin-->
<RemoveDir Directories="$(DeployFolder)\$(DeployPrefix)\Administration\bin\" /> <!--Lets delete the packages.config files-->
<Delete Files="$(DeployFolder)\$(DeployPrefix)\Administration\packages.config;
$(DeployFolder)\$(DeployPrefix)\packages.config"/>
然后发布的时候可以使用Web.Release.config替换Web.config
<!--Transform support-->
<UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Web\Microsoft.Web.Publishing.Tasks.dll"/> <!--Transform root web.config file-->
<TransformXml Condition="Exists('$(WebFolder)\Web.$(Configuration).config')" Source="$(WebFolder)\Web.config" Transform="$(WebFolder)\Web.$(Configuration).config" Destination="$(DeployFolder)\$(DeployPrefix)\Web.config" />
使用Settings.Release.txt替换Settings.txt
<!--Lets Copy \App_Data\Settings.Release.txt To \App_Data\Settings.txt -->
<Copy Condition="Exists('$(WebFolder)\App_Data\Settings.$(Configuration).txt')"
SourceFiles="$(WebFolder)\App_Data\Settings.$(Configuration).txt"
DestinationFiles="$(DeployFolder)\$(DeployPrefix)\App_Data\Settings.txt"
SkipUnchangedFiles="true" OverwriteReadOnlyFiles="true" />
<!--Lets delete the Settings.Release.txt file-->
<Delete Condition="Exists('$(DeployFolder)\$(DeployPrefix)\App_Data\Settings.$(Configuration).txt')"
Files="$(DeployFolder)\$(DeployPrefix)\App_Data\Settings.$(Configuration).txt"/>
MSBuild配置文件,可下载参考。
装了Win8+VS2013后,生成时会提示:
error MSB4019: 未找到导入的项目“C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\WebApplications\Microsoft.WebApplication.targets”。请确认 <Import> 声明中的路径正确,且磁盘上存在该文件。
解决方法:
在命令行使用"C:\Program Files (x86)\MSBuild\12.0\Bin\MSBuild.exe"替换”%windir%\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe“
或者从别的开发机上复制一份WebApplications
参考文章:
http://blogs.msdn.com/b/visualstudio/archive/2013/07/24/msbuild-is-now-part-of-visual-studio.aspx
MSBuild学习资料:
http://technet.microsoft.com/zh-cn/library/0k6kkbsd
ASP.NET MVC 使用MSBuild生成的几个注意事项的更多相关文章
- ASP.NET MVC 使用MSBuild部署的几个注意事项
ASP.NET MVC 使用MSBuild部署的几个注意事项 做新项目,当时参考NopCommerce的结构,后台Nop.Admin是一个独立的Area Web Site,但部署的时候发现,使用一键发 ...
- ASP.NET MVC 解析模板生成静态页一(RazorEngine)
简述 Razor是ASP.NET MVC 3中新加入的技术,以作为ASPX引擎的一个新的替代项.在早期的MVC版本中默认使用的是ASPX模板引擎,Razor在语法上的确不错,用起来非常方便,简洁的语法 ...
- ASP.NET MVC API 路由生成规则
我们都知道调用ASP.NET MVC的某些API函数(诸如:Url.Action.RedirectToAction等)可以生成URL,ASP.NET MVC会根据调用API函数时传入的参数去匹配系统定 ...
- ASP.NET MVC之视图生成URL(二)
前言 上一节我们讲述了MVC中从控制器到视图传递数据的四种方式,想必大家早已掌握了,那我们继续往下走. 话题 在MVC的Web应用程序中,我们经常会出现这样的操作,从一个视图跳转到另外一个视图,大部分 ...
- ASP.NET MVC之视图生成URL
在MVC的Web应用程序中,我们经常会出现这样的操作,从一个视图跳转到另外一个视图,大部分情况下都是通过链接来实现,当然这是一种非常不错的选择,为什么不说这是最好的选择呢?因为它也有其弊端,我们看看如 ...
- Asp.net MVC 简单实现生成Excel并下载
由于项目上的需求,需要导出指定条件的Excel文件.经过一翻折腾终于实现了. 现在把代码贴出来分享 (直接把我们项目里面的一部份辅助类的代码分享一下) 我们项目使用的是Asp.Net MVC4.0模式 ...
- Asp.Net MVC 从数据库生成代码(包括页面)
项目需要,数据库已经设计完成,需要生成相关的数据访问代码和页面. 参考:http://www.tracefact.net/asp-net/aspnetmvc-model-part1.aspx http ...
- asp.net mvc+EF 递归生成树结构返回json
0.数据表结构,主要属性有:Id.parentId(父节Id).Text.Url……等等. 1.新建一个树结构MenuModels public class MenuModels { private ...
- asp.net mvc 根据路由生成正确的url
假设存在这样一段路由配置: routes.MapRoute( name: "ProductList1_01", url: "pl/{bigSortId}_{smallSo ...
随机推荐
- 网络资源(6) - EJB视频
2014_08_24 http://v.youku.com/v_show/id_XMjE0NjE3MDA0.html?f=5227828 01_EJB3.0_下载安装与运行jboss -------- ...
- XSS学习笔记(五)-XSS防御
如果只生产XSS的地方都与输入或输出相关联的.所以错过了主要矛盾.而且,我们将有一个解决问题的办法:您可以输入端砚格过滤,是可能的过滤输出时间,输出到用户的GET或POST中是否有敏感字符: 输入过滤 ...
- Cloudera CDH 5集群搭建(yum 方式)
1 集群环境 主节点 master001 ~~ master006 从节点 slave001 ~~ slave064 2 安装CDH5的YUM源 rpm -Uvhhttp://ar ...
- crawler_httpurlconnection_自动编码识别
核心思想: 1:从响应头中读取 [命中解流准确率最高] 2:如果响应头中没有,打开流从源码中读取,[取舍,如果有一般在前30行会有,前100行中寻找] 3:如果还没有,根据字节码code位置,字符识别 ...
- UVALive 6472 Powers of Pascal
标题手段: 他给了一个无限Pascal阵,定义了powers,然后询问power为P的pascal矩阵里面的第R行C列的元素是多少. 最開始读错题意了...然后 就成了一个神得不得了的题了.后来请教的 ...
- 网站静态化处理—web前端优化—下【终篇】(13)
网站静态化处理—web前端优化—下[终篇](13) 本篇继续web前端优化的讨论,开始我先讲个我所知道的一个故事,有家大型的企业顺应时代发展的潮流开始投身于互联网行业了,它们为此专门设立了一个事业部, ...
- jQuery整理您的笔记----jQuery开始
Jquery它是一种高速.简明的JavaScript相框,jQuery设计目标:Write Less,Do More(写更少的代码,做很多其他的事情). 一.Jquery框架优势: 1.轻量级 jQu ...
- Java之IO转换流
直接上码: 读取键盘录入数据代码演示: import java.io.IOException; import java.io.InputStream; /** *读取键盘录入的数据,并打印在控 ...
- Android分析应用程序的构建过程
为了方便Android应用开发要求我们Androidproject编制和包装有了更深入的了解,例如,我们知道这是做什么的每一步,境和工具.输入和输出是什么.等等. 在前文<命令行下Android ...
- c#开发之多国语言解决方案gnu.gettext + poedit
1.工具简介 1.1.关于i18n i18n其来源是英文单词 internationalization的首末字符i和n,18为中间的字符数是“国际化”的简称. i10n为资源本地化,全称为Locali ...