繁体   English   中英

如何在不链接到 csproj 中的项目的情况下引用项目?

[英]How can I reference a project without linking to it in a csproj?

我有一个测试项目,它运行一个程序(一个.exe )并确保结果按预期出现。

我想声明测试项目取决于构建.exe的项目,并将.exe放到$(OutDir) (或$(OutputPath) )的子目录中。

  • $(OutDir)MyTests.dll (测试项目)
  • $(OutDir)\\Product\\Foo.exe (测试项目)
  • $(OutDir)\\Product\\xxx.dll (被测项目的依赖)

这样我就可以写一个表单的测试:

[TestClass]
[DeploymentItem("Product", "Product")]
public class RunFoo
{
    [TestMethod]
    public void HelpTextMatches()
    {
        // System.Diagnostics.Process.Start("Product\foo.exe" ...)
    }
}

有没有办法在我的测试.csproj文件中声明类似<ProjectReference东西,这将允许我实现这一目标?

(我不想让<Copy任务抓取被测程序的输出,因为这样就没有什么可以强制 MSBuild 在测试项目之前构建被测程序了。)

我想声明测试项目取决于构建 .exe 的项目......

在项目引用 ( source ) 上将ReferenceOutputAssembly设置为false

<ProjectReference Include="..\ProjectA\ProjectA.csproj">
  <Project>{b402782f-de0a-41fa-b364-60612a786fb2}</Project>
  <Name>ProjectA</Name>
  <ReferenceOutputAssembly>false</ReferenceOutputAssembly>
</ProjectReference>

...并将 .exe 放到 $(OutDir)(或 $(OutputPath))的子目录中

构建后操作。 或者就地运行测试中的 exe。

我不太明白你不使用ProjectReference原因,但这基本上做了添加ProjectReference所做的事情,除了没有添加程序集引用。

<ItemGroup>
    <ExtraDependencies include="ExeProject.csproj" />
</ItemGroup>

<Target Name="GetExtraDependenciesTargets">
    <MSBuild Projects="@(ExtraDependencies)" Targets="GetTargetPath">
        <Output TaskParameter="TargetOutputs" ItemName="ResolvedDependencyTargets" />
    </MSBuild>
</Target>

<Target Name="BuildExtraDependencies"
        BeforeTargets="BeforeBuild"
        DependsOnTargets="GetExtraDependenciesTargets"
        Inputs="@(ExtraDependencies)"
        Outputs="@(ResolvedDependencyTargets)">
    <MSBuild Projects="@(ExtraDependencies)" Targets="Build">
        <Output TaskParameter="TargetOutputs" ItemName="BuiltDependencyTargets" />
    </MSBuild>
</Target>

或者,您可以保留ProjectReference但在ResolveProjectReferences目标之后立即劫持构建过程,并删除 exe 作为依赖项(来自_ResolvedProjectReferencePaths )。

我认为您可以使用“复制”任务(可能在项目的构建后条件中调用)来做到这一点。

请注意,您只需使用Project -> Project build order即可控制 Visual Studio 中的Project -> Project build order Visual Studio 显示一个对话框,允许您显式设置项目依赖项:如果您设置Test项目依赖于您的Foo项目而不是在Test之前构建Foo (您可以检查它移动到同一 Visual Studio 中的“构建顺序”选项卡对话)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM