m0s*_*0sa 5 t4 visual-studio-2010 visual-studio-2010-sp1
在Visual Studio 2010中,我有以下项目布局:
T4模板包含一个如下所示的程序集引用:
<#@ assembly name="$(SolutionDir)\A\bin\Debug\A.dll" #>
Run Code Online (Sandbox Code Playgroud)
模板实例化了类C的实例.当我运行T4模板时,处理器加载项目A的dll并正确创建输出.当我想要改变项目A中的某些内容时,就会出现错误,比如修改C或D类.
无法将文件"obj\Debug\A.dll"复制到"bin\Debug\A.dll".该进程无法访问文件'bin\Debug\A.dll',因为它正由另一个进程使用.
我发现摆脱此错误的唯一方法是重新启动Visual Studio.有没有其他方法可以强制从VS卸载A.dll程序集?
我正在使用VS2010 SP1,并且在POST-BUILD事件期间运行自定义T4模板时首次构建时仍然在构建期间被阻止,该事件访问了同一项目的类的实例.
我如何使用它是使用Reflection来访问Project dll中的类.
直接从文件加载DLL时,我仍然遇到阻塞问题.
注意:技巧是将.dll作为字节数组加载到内存中,然后从原始字节数组加载程序集.不要使用Assembly.LoadFrom从文件加载
此代码来自我的T4模板文件,正在访问静态类"Information"并调用静态方法"Version"以返回字符串值.
string assemblyPath = Path.Combine(projectPath, @"bin\SampleProject.dll");
byte[] data;
using (var fs = File.OpenRead(assemblyPath))
{
data = new byte[fs.Length];
fs.Read(data, 0, Convert.ToInt32(fs.Length));
}
if (data == null || data.Length == 0)
{
throw new ApplicationException("Failed to load " + assemblyPath);
}
var asm = Assembly.Load(data);
appVersion = (string) asm.GetType("SampleProject.Information").GetField("Version").GetValue(null);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1918 次 |
最近记录: |