我正在使用旧的Visual Studio 2008 Web部署项目更新我们的CruiseControl.NET持续集成环境到Visual Studio 2010。
我不想使用Beta 2010 Web部署项目,因为我认为我可以在2010年使用更新的发布/打包。
目前我已设法配置CruiseControl脚本以两次调用MSBuild。首先在Release配置中构建解决方案,然后打包MVC项目。
然后我从一个可怕的文件路径中复制出Package中的正确文件(这让我怀疑我做得不对,但是嘿)和Transformed web.configs到测试服务器。
这终于有效了,但与我使用2008部署项目不同的是,这段代码将ExecutingAssembly作为App_web_xxxxx.dll而不是Company.Product.Web.dll返回,这就是我所追求的。
Dim CurrentAssembly As Reflection.Assembly = System.Reflection.Assembly.GetExecutingAssembly
Dim version As String = CurrentAssembly.GetName.Version.ToString
我知道GetName返回的字符串不仅仅是名称,但我正在调试它以查看它包含的内容。我知道这是编译/缓存的DLL,但为什么它不是MVC bin中的那个。
干杯
答案 0 :(得分:2)
我想出来了 - 基本上当我在footer.ascx中调用Assembly.GetExecutingAssembly时。这意味着代码是在页脚的动态编译的dll中。
我想要的是MVC网站的DLL。所以我在控制器上使用了一个扩展属性,它使用程序集信息设置ViewStates。
在我的情况下,我将再次使用此代码,因此扩展属性位于不同的Assemmly中,我可以包含在各种MVC项目中。这意味着我必须更改代码才能使用Assembly.GetCallingAssembly但它现在可以正常工作。