簡體   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