T4模板卷影副本不起作用

时间:2014-01-14 16:37:20

标签: visual-studio-2012 t4

我使用VS2012和T4模板以及assemblies are supposed to be shadow copied,这意味着您可以在模板中引用程序集,然后重新编译该程序集。但这对我来说根本不起作用。当我尝试它时,当我尝试重建程序集时,我得到的错误如下:

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了。我能做错什么?

2 个答案:

答案 0 :(得分:0)

所以这还不是一个答案,但希望我们能够实现

测试在VS2013中运行了以下内容(我意识到你运行VS2012)

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

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

    }
}

TestProj包含Testing类

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

这在VS2013中确实运行良好,据我所知,这也适用于VS2012。我会尝试在我的一台机器上安装VS2012,但你是否介意在你的安装上测试这个简单的样本来验证它不是什么东西在你持有DLL的解决方案?

如果您对项目文件感兴趣,可以在此处找到: https://github.com/mrange/CodeStack/tree/master/q21118821

答案 1 :(得分:0)

我解决类似的问题。 T4设计时模板在visual studio的相同过程下在不同的App域中处理。重建解决方案时,Visual Studio会尝试替换引用的DLL,但它无法替换它,因为它仍在使用中。

我通过删除处理T4模板的AppDomain来解决此问题。见msdn