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交付的正确的发布结果?
发布于 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)中找到。
因此,为了最终得到一个像样的解决方案,这就是我必须做的。
<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的其他项目,所以我们将OutDir发送到一个临时文件夹并删除,正如您在上面的步骤中所看到的。顺便说一句,OutDir是绝对必要的。如果您移除构建,它将无法工作。看来WebProjectOutputDir是在OutDir之外工作的。
整个设置只有一个小缺陷。在bin库中丢失了许多pdb文件。唯一复制的pdb是来自Web项目的pdb。
如果有人找到了MSBuild的一步解决方案,请发布:P,虽然这是一个很好的解决方案,但它仍然只有99.9999%的完美,并且非常像上面列出的那些,我肯定会有一些细微的差别或步骤遗漏。
发布于 2012-12-20 17:57:23
在查看了您的解决方案之后,我偶然发现了另一个解决方案https://stackoverflow.com/a/2953376/662853。
我修改了您的答案,改为使用_WPPCopyWebApplication目标:
<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>经过测试后,我不再需要删除信任和复制转换的文件。
https://stackoverflow.com/questions/5751146
复制相似问题