亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何正確打包生成源代碼的 Nuget 分布式自定義工具作為構建的一部分

如何正確打包生成源代碼的 Nuget 分布式自定義工具作為構建的一部分

C#
慕婉清6462132 2022-12-31 13:15:22
多虧了 Nate McMaster 的這篇精彩文章,我知道了如何將 .NET Core 控制臺應用程序打包為 Nuget 包,自動將自身安裝為(在本例中為預編譯任務)構建任務。為了測試是否一切正常,我只是讓我的自定義工具寫出一個公共 C# 類。這是 Github 上完整且可運行的示例。但是,我的自定義工具添加的文件實際上并不是構建的一部分(第一個實際生成文件的文件),因此引入的類在第一次構建后不在程序集中(請參見 此處的第 38 行)。但是,由于 .NET Core 項目現在自動將所有 .cs 文件包含在項目旁邊,因此它將新類構建到后續構建的輸出中(參見此處的第 57 行)。生成的文件不會完全消失,但通常不會像 MSBuild 任務輸出的那樣。但是,因為 exec 發生在目標文件中,所以我們應該可以訪問所有機制來實現這一點。所以我的問題是:我如何正確執行自定義構建工具(控制臺應用程序),該工具需要檢查項目及其文件并生成源代碼(最好在 obj/ 中作為<foo>.g.cs單個構建的一部分編譯到生成的程序集中?理想情況下,這生成的文件也不應出現在解決方案資源管理器中。幫助!
查看完整描述

1 回答

?
炎炎設計

TA貢獻1808條經驗 獲得超4個贊

在中間文件夾中生成中間文件(CustomTool.g.cs)時(您需要對其進行解析,請參閱 Refit 庫中的示例:https ://github.com/reactiveui/refit/blob/5b4e14aaf8a1fcc27396b7c08171d100aba1b97d/Refit/targets /refit.targets#L11 ); 您需要將其顯式添加為編譯項。

以您的示例目標文件(https://github.com/aniongithub/CustomTool/blob/master/CustomTool/RunCustomTool.targets#L13)為例:

<Project>

  <PropertyGroup>

    <IntermediateOutputPath Condition="$(IntermediateOutputPath) == '' Or $(IntermediateOutputPath) == '*Undefined*'">$(MSBuildProjectDirectory)obj\$(Configuration)\</IntermediateOutputPath>


    <!-- Command to invoke CustomTool -->

    <CustomTool>dotnet "$(MSBuildThisFileDirectory)/netcoreapp2.2/CustomTool.dll"</CustomTool>


    <!-- Other variables  -->

    <CustomVariable>"$(MSBuildProjectDir)"</CustomVariable>

  </PropertyGroup>


  <Target Name="CustomTool" BeforeTargets="CoreCompile" DependsOnTargets="PrepareForBuild">

    <Exec Command="$(CustomTool) $(ProjectPath) $(IntermediateOutputPath)CustomTool.g.cs" />


    <!-- add generated file as a compile item, otherwise it won't get picked up -->

    <ItemGroup Condition="Exists('$(IntermediateOutputPath)\CustomTool.g.cs')">

      <Compile Include="$(IntermediateOutputPath)\CustomTool.g.cs" />

    </ItemGroup>

  </Target>

</Project>


查看完整回答
反對 回復 2022-12-31
  • 1 回答
  • 0 關注
  • 93 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號