【问题标题】:How to add some lines to the project's csproj file after installing a nuget安装nuget后如何在项目的csproj文件中添加一些行
【发布时间】:2020-10-08 21:22:30
【问题描述】:

我创建了一个库,该库将变成在目标程序集上运行的 nuget。 我们称之为 NugLib

目标:

我想要的是在安装 NugLib 后向目标程序集添加 2,3 行。 NugLib(库)有一个 .targets 文件,该文件将一些文件复制到目标程序集中。

我希望能够在项目(.csproj 文件)中添加一些行。不确定是否可以在自动安装 nuget 期间/之后通过 .targets .props .nuspec 或 lib 的 csproj 来完成。

想要将这 3 行添加到目标程序集(nuget 使用者):

  <Content Include=".pack\*.*;.pack\**;.pack\**\*" />
  <Import Project="build\build.targets" />
  <Import Project=".pack\package.csproj" Condition="Exists('.pack\package.csproj')" />

【问题讨论】:

  • 据我所知,Build文件夹下的targets文件是一个将其他一些内容文件导入到主项目中的函数文件,它也是一个content targets文件吗?另外,如果你想使用这个targets文件,它应该被命名为.targets,在你这边,它应该是NugLib.targets文件。见this link
  • 是的@PerryQian-MSFT 目标的名称是正确的并且正在做它的工作,但似乎我可以通过 nuspec 文件实现我想要的,其他人在另一个网站上告诉我。看来你们俩也提到了同一个链接,谢谢。
  • 好的,谢谢,我熟悉 .targets 文件,targets 文件正在做的主要任务是将所需的内容和目录复制到目标项目的位置。 BTW 似乎 nuspec 也可以做同样的工作,如果你想提供一个答案,所以请让我知道如何更改我之前在 package.csproj 中定义的项目的 ID/Title 以及一些额外的信息。跨度>

标签: visual-studio msbuild nuget csproj


【解决方案1】:

安装后如何在项目的 csproj 文件中添加一些行 核桃

由于您使用的是网络标准 2.1 类库,因此您可以使用更简单的方法。

您可以按照以下步骤操作:

1) 创建这样的项目结构:

注意:不能使用import="xxxx.csproj",这是非法的,一个主csproj文件不能导入另一个同级别的csproj文件。相反,您应该改为使用package.targets 而不是packages.csproj

2)你应该在build文件夹中创建一个名为&lt;package_id&gt;.targets的文件,这样当你安装这样的nuget包时它可以在你的主project.csproj中导入这样的节点。

NugLib.targets 文件中:

<Project>
  <Import Project="..\contentFiles\any\any\build\build.targets" />
  <Import Project="..\contentFiles\any\any\package.targets" Condition="Exists('..\contentFiles\any\any\package.targets')" /> 
</Project>

3) 上传 NugLib 项目,然后将这些添加到 NugLib.csproj 文件中:

  <ItemGroup>  
     <Content Update=".pack\**" Pack="true" IncludeInPackage="true" PackagePath="content\any\any\;contentFiles\any\any\;;">
    </Content>
    <Content Update="build\build.targets" Pack="true" IncludeInPackage="true" PackagePath="content\any\any\;contentFiles\any\any\;;">    
    </Content>
    <None Update="build\NugLib.targets" Pack="true"  PackagePath="build\NugLib.targets" />
  </ItemGroup>

4) 右击你的项目,选择Pack,那么bin\Debug\xxx.nupkg下就会存在新的NugLib nuget包了。

另外,如果要重命名包,可以参考this document

这些文件将自动添加到您的主项目中。在 net framework 项目中,像这样:

在net core项目中,在obj\ConsoleApp1.csproj.nuget.g.targets

要添加项目的ID/Title,您可以直接在NugLib.csproj文件中设置这些属性:

<PropertyGroup>
  <PackageId>AppLogger</PackageId>
  <Version>1.0.0</Version>
  <Authors>your_name</Authors>
  <Company>your_company</Company>
</PropertyGroup>

【讨论】:

  • 感谢您的回答,乍一看,可能有一些东西可以尝试,所以请给我时间尝试一些部分,但现在我可以提一些要点,首先是关于 PackageId 和其他信息,NugLib 项目已经在 Package.csproj 中定义了所有内容,它在这里充当通用打包工具,事实是我想根据目标库(将安装 NugLib)设置它们我希望将 PackageId 更改为“ConsumerProject “基于该项目的名称。将尝试所有部分并提供反馈,谢谢
  • 让我在这里继续讨论,根据我看到的每个部分,并会在这里提出相关问题,你说“一个主 csproj 文件无法导入另一个相同级别的 csproj 文件”但它正在工作正如预期的那样,如果我将这些数据移动到 package.targets 可能会有什么不同?可以定义完全相同的方式吗?这样做有什么好处?
  • 关于这一点:“由于您使用的是网络标准 2.1 类库,因此您可以使用更简单的方法。”与什么方法相比更简单的方法?你的意思是 nupsec 方式?
  • Net 标准项目有一种简单的方法可以在不使用 nuspec 文件的情况下创建 nuget 包。实际上,在我这边,正常的行为是导入目标或道具文件,我们不导入 csproj 文件另一个 csproj 文件。它可能有一些隐含的问题。由于使用相同的xml节点&lt;Import&gt;,移动到packages.targets与以前相同。你不用太担心。
  • 对于 net framework 项目,nuget 会将 content 文件夹中的内容文件导入到主项目中,而新建 sdk 项目(net standard 或 net core),nuget 会将 ContentFiles 文件夹中的内容文件导入 net核心项目。这是nuget机制。见this link
猜你喜欢
  • 1970-01-01
  • 2021-07-18
  • 2020-01-12
  • 1970-01-01
  • 1970-01-01
  • 2021-03-20
  • 1970-01-01
  • 2020-11-13
  • 1970-01-01
相关资源
最近更新 更多