簡體   English   中英

無法從MSBuild引用Nuget包的“tools”文件夾中的可執行文件

[英]Can't reference an executable in the “tools” folder of a Nuget package from MSBuild

我有一個C#控制台應用程序項目,我試圖將其轉換為Nuget包,以便我的團隊中的多個項目可以在.csproj文件中的AfterResolveReferences步驟中調用此項目中的可執行文件。

我已經使用.nuspec文件創建了Nuget包,看起來像這樣:

<package ...>
  <metadata>
    ...
  </metadata>
  <files>
    <file src="bin\Release\*.*" target="tools" />
  </files>
</package>

這將工作並創建一個Nuget包,其中包含我在“tools”目錄中的可執行文件。 問題是包含文件夾包含將經常更改的Nuget包的版本號。 我試圖在.csproj文件中像這樣引用它:

<Target Name="AfterResolveReferences">
  <Exec Command="$(SolutionDir)packages\PackageName.1.2.3\tools\AssemblyName.exe" />
</Target>

當我在路徑中包含PackageName.1.2.3時,它按預期工作,但這顯然是一個非常脆弱的解決方案。 當我只使用“AssemblyName.exe”時,我得到“命令AssemblyName.exe退出代碼9009”。

顯然有一個簡單的標准來做這種我不熟悉的事情 - MSBuild和Nuget不是我最強的套裝,所以我非常感謝任何建議。

我實際上想要實現的是創建一個TypeScript文件,其中包含使用TypeLite.Lib包在我的模型項目中定義的C#類派生的接口。 必須在構建Web項目之前創建TypeScript文件,因為Web項目中的TypeScript代碼取決於此輸出中包含的接口。 我願意接受更優雅的方法來解決這個問題,但我仍然想知道如何解決引用問題。

我們的想法是NuGet包應該是自包含的。 也就是說,在使用nuget包時,用戶不需要向項目文件添加任何內容。

NuGet包還可以包含構建邏輯 - 如果將PackageName.targets文件放入build目錄,它將自動包含在引用NuGet包的項目中。 從那里,您可以定義目標,並通常使用$(MSBuildThisFileDirectory)..\\tools\\MyTool.exe

這很重要,因為packages目錄僅用於通過packages.config進行“經典”NuGet引用,而不是用於引用NuGet包的新式PackageReference方式,其中所有項目/解決方案共享用戶級全局包緩存(無解決方案) - 本地副本)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM