MSTest cannot find the assembly

前端 未结 4 608
旧巷少年郎
旧巷少年郎 2020-12-19 01:24

I was using MSTest

and i use command mstest /testsettings:local.Testsetting /testcontainer:folder\\obj\\Debug\\test.dll

and this is the output,

4条回答
  •  借酒劲吻你
    2020-12-19 01:40

    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.

提交回复
热议问题