What is the relative path root of DeploymentItemAttribute?

若如初见. 提交于 2019-12-03 11:46:54

问题


Using MSTest, what is the relative path root of the DeploymentItemAttribute.


回答1:


Per the MSDN page...

Relative paths are relative to the RelativePathRoot setting found in the .testrunconfig file.

That setting is, by default, the Solution directory. So, if you have this project structure

SecretProject\
    ComponentA\
    ComponentA.Test\
        Resources\
            required.xml
        ComponentA.Test.csproj
        Tests.cs
    SecretProject.sln

And you want to deploy required.xml, you're going to create a DeploymentItemAttribute like this

[TestClass]
public class Tests
{
    [TestMethod]
    [DeploymentItem("ComponentA.Test\Resources\required.xml")]
    public void Test() 
    {

    }
}

It seems the file properties need to be set to 'Content' and 'Copy always' or 'Copy if newer'. There are advanced examples on this MSDN page.




回答2:


To assume that the RelativePathRoot default is the dir where your solution resides was not correct in my case, nor was RelativePathRoot defined within my .testrunconfig file. I found the RelativePathRoot default to be the /bin/debug dir for the solution.

Walking back from that point, then walking up to my file that I was attempting to deploy for the unit test worked fine.




回答3:


So I'm gonna add my experience.

So if you're using .testrunconfig file, that will trump (override) what I'm saying below.

I figured there were a few options.

Relative to the current .csproj

Relative to the .sln

Relative to the current .cs file

I finally got my build system working by using the "relative to the current .cs file" approach.

In my example, I needed a Xsd from a different project copied over for my UnitTest. But the type of file does not matter.

Example:

c:\myfolder\MyXsdProject\XSDs\MyCoolXsd.xsd

c:\myfolder\MyCsharpUnitTestProject\MySubFolder1\MySubFolder2\MyUnitTestClass.cs

namespace MyCsharpUnitTestProject.MySubFolder1.MySubFolder2
{

    [TestClass]
    [DeploymentItem(@"..\..\..\MyXsdProject\XSDs\MyCoolXsd.xsd")]

    public class MyUnitTestClass
    {
    }
}


来源:https://stackoverflow.com/questions/1822612/what-is-the-relative-path-root-of-deploymentitemattribute

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!