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