MSTest cannot find the assembly
I was using MSTest
and i use command mstest /testsettings:local.Testsetting /testcontainer:folder\obj\Debug\test.dll
and this is the output,
Run has the following issue(s): Warning: Test Run deployment issue: 开发者_开发知识库 The assembly or module 'Microsoft.Practices. Prism' directly or indirectly referenced by the test container 'test.dll' was not found. Warning: Test Run deployment issue: The assembly or module 'Project.Common.dll' directly or indirectly referenced by the test container 'test.dll' was not found. Warning: Test Run deployment issue: The assembly or module 'Project.Infrastructure.dll' directly or indirectly referenced by the test container 'test.dll' was not found. Warning: Test Run deployment issue: The assembly or module 'Microsoft.Practices. Prism' directly or indirectly referenced by the test container 'test.dll' was not found.
What can i do so MSTest can run well.
You can install the Prism file in the GAC of your build server.
All assemblies that are not used directly in test will not be copied to test folder. Therefor, those test methods should be decorated with attribute like:
[DeploymentItem("Microsoft.Practices.Prism.dll")]
This solves the problem without adding the assembly to the GAC.
Ok. The DeploymentItem is a way to fix this. However, DeploymentItem is a little fragile.
Here is how I fixed it.
The "current directory" has to line up with the DeploymentItem. The best compromise I found would be to set the current directory to where the .sln file is.
Here is my folder structure.
C:\SomeRootFolder\
C:\SomeRootFolder\MySolution.sln
C:\SomeRootFolder\packages\
C:\SomeRootFolder\packages\MyNugetPackage.1.2.3.4\lib\net45\SomeThirdPartyDll.dll
C:\SomeRootFolder\MyTestProject\MyTestProject.csproj
C:\SomeRootFolder\MyTestProject\MyTestClass.cs
MyTestClass.cs
[TestClass]
public class MyTestClass
{
[TestMethod]
/* The DeploymentItem item below is for error ::: Warning: Test Run deployment issue: The assembly or module 'SomeDll' directly or indirectly referenced by the test container 'C:\SomeRootFolder\MyTestProject\bin\debug\MyTestProject.dll' was not found. */
/* There must be a CD (to the .sln folder) command... before the MsTest.exe command is executed */
[DeploymentItem(@".\packages\MyNugetPackage.1.2.3.4\lib\net45\SomeDll.dll")]
public void MyTest()
{
}
}
The "trick" is to do a CD (change directory) to the folder that houses the .sln.
REM Now the normal restore,build lines
nuget.exe restore "C:\SomeRootFolder\MySolution.sln"
REM the above nuget restore would create "C:\SomeRootFolder\packages\MyNugetPackage.1.2.3.4\lib\net45\SomeThirdPartyDll.dll"
MSBuild.exe "C:\SomeRootFolder\MySolution.sln" /p:Configuration=Debug;FavoriteFood=Popeyes /l:FileLogger,Microsoft.Build.Engine;logfile=MySolution.Debug.Build.log
REM (the below line is the trick to line up the 'current folder' with the relative path of the DeploymentItem)
cd "C:\SomeRootFolder\"
REM now the below will work without the annoying message, note that C:\SomeRootFolder\MyTestProject\bin\Debug\SomeThirdPartyDll.dll exists
MsTest.exe /testcontainer:"C:\SomeRootFolder\MyTestProject\bin\Debug\MyTestProject.dll" /resultsfile:MyTestProject.Dll.Results.trx
Now because the "current directory" (the result of the CD) is at "C:\SomeRootFolder\", the DeploymentItem relative path works correctly.
Jimminy Crickets.......that is a little nutsy.
Note, the Paul Taylor answer here
Running MsTest from the command line with a custom assembly base directory
did not work for me.
easiest way. Just add
string value = AppDomain.CurrentDomain.BaseDirectory;
to your code (at the start point of your test method)
Add a breakpoint to the newly added code and check what is the path of value
variable.
continue the test process and after everything get success navigate to the folder of values
variable.
You might see all the dlls inside the folder. Just copy them and past ware ever you want and execute the project dll using mstest command line tool.
set mstestPath="C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE"
%mstestpath%\mstest /testcontainer:CodedUITestProject1.dll
精彩评论