在测试期间,我想从本地文件夹而不是GAC中选择一个dll。根据网络上的articles和msdn,使用DEVPATH是其中一种解决方案,但它似乎无法正常工作。 (我不想更改版本或删除强名称 - 根据各个地方的建议,这是解决此问题的两种替代方法。)
详细信息: 我有ProductCode.dll,它是gac-ed。我对源代码做了一些更改,我想测试一下。我有用TestCode.dll编写的单元测试。但是,在测试期间(我在命令行上使用vstest.console.exe),gac中的程序集将被选中。我希望.NET能够在本地文件夹中获取程序集。
我已将DEVPATH环境变量设置为:
set DEVPATH=C:\temp\NoSysGac\TryingAppDomainsToBypassGac\TestCodeDllAndLatestProductCodeDll
我修改了C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ config \ machine.config中的machine.config以启用开发模式:
<runtime>
<developmentMode developerInstallation="true"/>
</runtime>
然后我使用:
运行测试C:\Path\to\vstest.console.exe TestCode.dll
但是这无法找到我添加的新方法,因为它从GAC中获取了ProductCode.dll,这是旧的。我可以验证修改后的machine.config确实被选中,因为当我在文件中输入错误时应用程序无法启动。 Fusion也识别DEVPATH值,但仍然没有看到它。它只是从gac返回程序集。
Fusion日志:
Assembly manager loaded from: C:\Windows\Microsoft.NET\Framework\v4.0.30319\clr.dll
Running under executable C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow\te.processhost.managed.exe
--- A detailed error log follows.
=== Pre-bind state information ===
LOG: DisplayName = ProductCode, Version=1.0.0.0, Culture=neutral, PublicKeyToken=6b6a45a9f6fa2e7a
(Fully-specified)
LOG: Appbase = file:///C:/temp/NoSysGac/TryingAppDomainsToBypassGac/TestCodeDllAndLatestProductCodeDll
LOG: Initial PrivatePath = NULL
LOG: Dynamic Base = NULL
LOG: Cache Base = NULL
LOG: AppName = te.processhost.managed.exe
Calling assembly : TestCode, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\CommonExtensions\Microsoft\TestWindow\te.processhost.managed.exe.Config
LOG: Using host configuration file:
LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config.
LOG: Post-policy reference: ProductCode, Version=1.0.0.0, Culture=neutral, PublicKeyToken=6b6a45a9f6fa2e7a
LOG: Found assembly by looking in the GAC.
LOG: Binding succeeds. Returns assembly from C:\windows\Microsoft.Net\assembly\GAC_MSIL\ProductCode\v4.0_1.0.0.0__6b6a45a9f6fa2e7a\ProductCode.dll.
LOG: Assembly is loaded in default load context.
我错过了一些明显的东西吗?或者也是.NET 4.5中的DEVPATH broken?