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