Ok。DeploymentItem は、これを修正する方法です。ただし、DeploymentItem は少し壊れやすいです。
これが私がそれを修正した方法です。
「現在のディレクトリ」は、DeploymentItem と一致する必要があります。私が見つけた最善の妥協点は、現在のディレクトリを .sln ファイルがある場所に設定することです。
これが私のフォルダ構造です。
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()
{
}
}
「トリック」は、.sln を格納するフォルダーに CD (ディレクトリの変更) を実行することです。
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
「現在のディレクトリ」(CD の結果) は「C:\SomeRootFolder\」にあるため、DeploymentItem の相対パスは正しく機能します。
ジミニー・クリケッツ……それはちょっとおかしな話だ。
ここでポール・テイラーの答えに注意してください
カスタム アセンブリ ベース ディレクトリを使用してコマンド ラインから MsTest を実行する
私にはうまくいきませんでした。