2014-01-14 107 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