2009-11-30 109 views

回答

17

MSDN网页...

相对路径是相对于在 .testrunco​​nfig文件中找到的 RelativePathRoot设置。

该设置默认为解决方案目录。所以,如果你有这样的项目结构

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

而且要部署required.xml,你要创建一个DeploymentItemAttribute这样

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

    } 
} 

看来属性需要的文件被设置为'内容'和'复制总是'或'如果更新复制'。在this MSDN page上有高级示例。

+3

“看来文件属性需要被设置为‘内容’和‘始终复制’或‘复制,如果新的’。”你会感到惊讶有多难找到这个... – SouthShoreAK

+0

@SouthShoreAK - 它被发现在哪里? –

+0

@ScottLangham它位于部署项目的File属性中。在'解决方案资源管理器'中,您需要突出显示该文件(在本例中为'required.xml'),右键单击它并选择属性。你应该在那里看到它。 – dpimente

1

假设RelativePathRoot默认值是您的解决方案所在的目录不正确,我的.testrunco​​nfig文件中也没有定义RelativePathRoot。我发现RelativePathRoot默认为解决方案的/ bin/debug目录。

从这一点开始走回头路,然后走到我正在尝试部署用于单元测试的文件时工作得很好。

0

所以我要添加我的经验。

所以,如果你使用.testrunco​​nfig文件,这将胜过(覆盖)我在下面说的。

我觉得有几个选择。

相对于目前的.csproj

相对于的.sln

相对于当前.cs文件

我终于得到了我的构建系统通过使用“工作相对于当前的.cs文件“的方法。

在我的示例中,我需要为我的UnitTest复制另一个项目的Xsd。但是文件的类型并不重要。

实施例:

C:\ MyFolder文件\ MyXsdProject \的XSD \ MyCoolXsd.xsd

C:\ MyFolder文件\ MyCsharpUnitTestProject \ MySubFolder1 \ MySubFolder2 \ MyUnitTestClass。CS

namespace MyCsharpUnitTestProject.MySubFolder1.MySubFolder2 
{ 

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

    public class MyUnitTestClass 
    { 
    } 
}