如何在安装期间更新 .NET Standard 应用程序的 csproj 文件中特定包的所有引用(目标、包引用)?

Zhi Lv - MSFT 32,446 信誉分 Microsoft 供应商
2024-03-22T02:37:40.23+00:00

目前,当我在.NET Standard应用程序中安装NuGet包时,我只能更新csproj文件中的PackageReference。

<PackageReference Include="sip-si" Version="4.0.10" />

其他所有引用都无法更新为同一csproj文件中的更新版本,例如:

<Target Name="CopyReferenceDll" AfterTargets="Build">
	<Copy SourceFiles="..\..\_Common\packages\sip-si.4.0.9\lib\netstandard2.0\Wrapper.dll" DestinationFolder="$(TargetDir)" />
	<Copy SourceFiles="..\..\_Common\packages\sip-si.4.0.9\lib\netstandard2.0\Wrapper.pdb" DestinationFolder="$(TargetDir)" />
  </Target>
<Import Project="..\..\_Common\packages\sip-si.4.0.9\build\sip5-simu-dsi.targets" Condition="Exists('..\..\_Common\packages\sip-si.4.0.9\build\sip5-simu-dsi.targets')" />

并且安装后会出错,我需要手动更新它们。有没有办法修改sip-si.nuspec文件,使得在安装NuGet包后,目标部分也会被更新为特定版本?

我看到在NuGet包安装期间运行PowerShell脚本是不可能的。有人可以帮我解决这个问题吗?即如何在安装期间更新.csproj文件。

注意: 此问题总结整理于:[how to update all the reference Target, package referenceof a .net standard app's csproj of a specific package during installation](https://learn.microsoft.com/en-us/answers/questions/1432939/how-to-update-all-the-reference(target-package-ref)

ASP.NET Core
ASP.NET Core
.NET Framework 中一套用于生成 Web 应用程序和 XML Web 服务的技术。
32 个问题
0 个注释 无注释
{count} 票

接受的答案
  1. XuDong Peng-MSFT 10,746 信誉分 Microsoft 供应商
    2024-03-22T05:19:44.6166667+00:00

    你好,

    很遗憾,目前在.NET Core和.NET Standard项目中,由于安全原因,NuGet不支持在包安装期间运行自定义脚本,因此没有直接的方法来在更新NuGet包版本时自动更新这些文件路径。

    不过,你可以尝试以下方法:

    1. 不要在.csproj文件中硬编码版本号,而是使用MSBuild属性。这样可以在一个地方定义版本,并在整个项目文件中使用该属性。
    <PropertyGroup>
        <SipSiVersion>4.0.10</SipSiVersion>
    </PropertyGroup>
       
    <PackageReference Include="sip-si" Version="$(SipSiVersion)" />
       
    <Target Name="CopyReferenceDll" AfterTargets="Build">
        <Copy SourceFiles="..\..\_Common\packages\sip-si.$(SipSiVersion)\lib\netstandard2.0\Wrapper.dll" DestinationFolder="$(TargetDir)" />
    </Target>
    
    1. 对于DLL和PDB文件,如果你的包版本遵循一致的命名约定,可以在文件路径中使用通配符版本控制。
    <Copy SourceFiles="..\..\_Common\packages\sip-si.*\lib\netstandard2.0\Wrapper.dll" DestinationFolder="$(TargetDir)" />
    
    1. 如果你能控制NuGet包(sip-si),可以在包内包含一个.targets文件,其中包含必要的MSBuild逻辑来复制文件,并使用属性正确引用它们。
    2. 尽管NuGet不再允许在包安装期间运行PowerShell脚本,但你可以使用一个自定义的MSBuild目标,在包恢复后运行以更新引用。

    如果答案是正确的,请点击“接受答案”并点赞。 如果您对此答案还有其他疑问,请点击“评论”。 注意:如果您想接收相关电子邮件,请按照我们的文档中的步骤启用电子邮件通知 此线程的通知。

    0 个注释 无注释

0 个其他答案

排序依据: 非常有帮助

你的答案

问题作者可以将答案标记为“接受的答案”,这有助于用户了解已解决作者问题的答案。