[英]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.