2014-01-14 106 views
0

我使用VS2012和T4模板和assemblies are supposed to be shadow copied,這意味着您可以在模板中引用程序集,然後重新編譯該程序集。但這根本不適合我。當我嘗試它,當我試圖重建大會,我得到這樣的錯誤:T4模板陰影複製不起作用

Unable to copy file "obj\Debug\xxx.dll" to "..\bin\xxx.dll". 
The process cannot access the file '..\bin\xxx.dll' because it is being used by another process. 

它周圍的唯一方法是重新啓動Visual Studio,這是過於冗長,我準備完全放棄T4 。我可能做錯了什麼?

+0

我認爲這是在VS2012 SP1中添加的。你正在使用哪個版本? – FuleSnabel

+0

我的錯誤,是在VS2010 SP1中添加的。 VS2012應該支持它。你有一個樣品是否有責備? – FuleSnabel

+0

@FuleSnabel:*任何引用任何可執行文件的*指令都可以做到這一點。 VS鎖定文件,如果我嘗試重新編譯它,它會失敗,因爲該文件不可寫。 –

回答

0

所以這是不是一個真正的答案了,但希望我們到達那裏

測試跑VS2013以下(我知道你運行VS2012)

<#@ assembly name = "$(SolutionDir)\TestProj\bin\Debug\TestProj.dll"#> 
<#@ import namespace = "TestProj"#> 

namespace ConsoleApplication1 
{ 
    class <#=Testing.Name#> 
    { 

    } 
} 

的TestProj包含測試類

namespace TestProj 
{ 
    public static class Testing 
    { 
     public static string Name 
     { 
      get { return "Tester" ;} 
     } 
    } 
} 

這確實在VS2013工作得很好,據我所知,這工作在VS2012以及。我會嘗試安裝VS2 012在我的一臺機器上,但你介意在你的安裝上測試這個簡單的例子,以驗證它不是你的解決方案中的東西,持有該DLL?

如果你有興趣的項目文件,你可以在這裏找到: https://github.com/mrange/CodeStack/tree/master/q21118821

+0

當我有一些時間並回報時,我會試試這個。謝謝! –

0

我解決類似的問題。 T4設計時間模板在Visual Studio的相同流程下在不同的App域中處理。當重建解決方案時,Visual Studio會嘗試替換引用的DLL,並且它無法替換它,因爲它仍在使用中。

我通過刪除處理T4模板的AppDomain來解決此問題。請參閱msdn