首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NAnt MVC发布网站

NAnt MVC发布网站
EN

Stack Overflow用户
提问于 2011-04-22 00:17:10
回答 2查看 1.9K关注 0票数 6

Problem:我想用NAnt优雅地发布一个MVC网站。

简单的不?错了..。下面是我看过的一些堆栈溢出资源。他们每个人都有问题..。

堆栈溢出1: Publish WebApplication using NAnt

这一次的结果是web.config没有被转换,更多的文件出现在垃圾桶中,这些文件不应该喜欢所有东西的entity.dll.config!

堆栈溢出2: Replicate VS2008 "Publish Web Site" from command line

这个会和以前的解决方案一样,只是更糟.它将复制项目中的所有内容并将其转储到发布文件夹中.别开玩笑!

堆栈溢出3: MSBuild Script and VS2010 publish apply Web.config Transform

可接受的解决方案构建在Stackoverflow 1之上,但它是纯MsBuild xml,而不是NAnt xml。它也只修复Webconfig,因此仍然会留下那些显示的随机文件。还有另一种解决方案(不被接受),它是非常非常接近纠正的,但是web.config中的连接字符串处于假的边缘状态,给您留下了另一个糟糕的web.config。

不用说,这已经是3-4天了,10+不同的StackOverFlow答案,没有银弹.有没有简单的解决办法?我必须犯一些罪大恶极的错误,并创建一些糟糕透顶的NAnt脚本,以实现VS2010交付的正确的发布结果?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-08 22:02:31

好吧,我在这个博客上偶然发现的,http://blogs.msdn.com/b/webdevtools/archive/2009/05/04/web-deployment-web-config-transformation.aspx

在步骤4中,他展示了一个我从未见过的命令行arg,/t:TransformWebConfig

不幸的是,单靠这一点并不能解决问题。它确实执行了转换,但是转换可以在obj/Release/TransformWebConfig/transformed/Web.config (obj/Release或obj/Debug或obj/YourTranformName)中找到。

因此,为了最终得到一个像样的解决方案,这就是我必须做的。

代码语言:javascript
复制
<exec program="${exec.msbuild}" failonerror="true">
    <arg value="${path.sourceCode}/ProjectFolder/Project.csproj" />
    <arg value="/p:Configuration=Release" />
    <arg value="/t:ResolveReferences" />
    <arg value="/t:_CopyWebApplication" />
    <arg value="/t:TransformWebConfig" />
    <arg value="/p:OutDir=${path.buildFromProject}/temp/" />
    <arg value="/p:WebProjectOutputDir=${path.buildFromProject}/ProjectBuild/" />
</exec>

<delete dir="${path.build}/temp" failonerror="true"/>
<delete file="${path.build}/ProjectBuild/Web.config" failonerror="true"/>
<delete file="${path.build}/ProjectBuild/Web.Debug.config" failonerror="true"/>
<delete file="${path.build}/ProjectBuild/Web.Release.config" failonerror="true"/>
<copy file="${path.sourceCode}/ProjectFolder/obj/Release/TransformWebConfig/transformed/Web.config" tofile="${path.build}/ProjectBuild/Web.config" />

注意,OutDir与WebProjectOutputDir不一样。这就是为什么:

  • OutDir为您提供了项目中的所有内容,"solution".
  • WebProjectOutputDir为您提供了web“项目”的最小值(即不是整个解决方案)。

很多额外的负担来自解决方案中使用我们不想要的OutDir的其他项目,所以我们将OutDir发送到一个临时文件夹并删除,正如您在上面的步骤中所看到的。顺便说一句,OutDir是绝对必要的。如果您移除构建,它将无法工作。看来WebProjectOutputDir是在OutDir之外工作的。

整个设置只有一个小缺陷。在bin库中丢失了许多pdb文件。唯一复制的pdb是来自Web项目的pdb。

如果有人找到了MSBuild的一步解决方案,请发布:P,虽然这是一个很好的解决方案,但它仍然只有99.9999%的完美,并且非常像上面列出的那些,我肯定会有一些细微的差别或步骤遗漏。

票数 6
EN

Stack Overflow用户

发布于 2012-12-20 17:57:23

在查看了您的解决方案之后,我偶然发现了另一个解决方案https://stackoverflow.com/a/2953376/662853

我修改了您的答案,改为使用_WPPCopyWebApplication目标:

代码语言:javascript
复制
<exec program="${exec.msbuild}" failonerror="true">
    <arg value="${path.sourceCode}/ProjectFolder/Project.csproj" />
    <arg value="/p:Configuration=Release" />
    <arg value="/t:ResolveReferences" />
    <arg value="/t:_WPPCopyWebApplication" />
    <arg value="/t:TransformWebConfig" />
    <arg value="/p:OutDir=${path.buildFromProject}/temp/" />
    <arg value="/p:WebProjectOutputDir=${path.buildFromProject}/ProjectBuild/" />
</exec>

经过测试后,我不再需要删除信任和复制转换的文件。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5751146

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档