我需要将NuGet dll的Copy Local设置为false。在那之前,我使用了package.config格式,一切都很顺利。迁移到Package Reference format后,我无法找到如何做到这一点。有人可以帮我吗?
我需要将NuGet dll的Copy Local设置为false。在那之前,我使用了package.config格式,一切都很顺利。迁移到Package Reference format后,我无法找到如何做到这一点。有人可以帮我吗?
您可以使用PrivateAssets。从文档中复制
<ItemGroup>
<!-- ... -->
<PackageReference Include="Contoso.Utility.UsefulStuff" Version="3.6.0">
<PrivateAssets>all</PrivateAssets>
<ExcludeAssets>runtime</ExcludeAssets>
</PackageReference>
<!-- ... -->
</ItemGroup>
<packagereference ..><privateassets>all</privateassets>...
或者<privateassets>runtime;...
,使其像旧的<reference><private>true</private>...
一样(在引用设置为false时复制本地属性)。
在您的.csproj文件或解决方案根目录中的Directory.Build.targets文件中导入下面的目标。
<!--
***********************************************************************************************
RemovePrivatePackageReference.targets
This is a hack to ensure privateassets = all is handled similar to reference
private=true (copy local false) even for legacy nugets.
Note that this hack is only intended to help legacy solutions where nugets owners hasn't
updated their packages. It is not intended as a long-term sustainable solution.
[Anders Laub // Laub+Co]
***********************************************************************************************
-->
<Project>
<Target Name="RemovePrivatePackageReference" AfterTargets="ResolveReferences">
<ItemGroup>
<_PrivatePackagesReferences Include="@(PackageReference)"
Condition="%(PackageReference.PrivateAssets) == 'all' or $([System.String]::Copy('%(PackageReference.PrivateAssets)').Contains('runtime'))">
<NuGetPackageId>%(Identity)</NuGetPackageId>
</_PrivatePackagesReferences>
</ItemGroup>
<ItemGroup>
<_ReferenceCopyLocalPathsFromPackages Include="@(ReferenceCopyLocalPaths)" Condition="%(ReferenceCopyLocalPaths.NuGetPackageId) != ''" />
</ItemGroup>
<ItemGroup>
<_PrivatePackageReferenceCopyLocalPaths
Include="@(_ReferenceCopyLocalPathsFromPackages)" Condition="'%(NuGetPackageId)' != '' and '@(_PrivatePackagesReferences)' != ''" />
</ItemGroup>
<ItemGroup>
<ReferenceCopyLocalPaths Remove="@(ReferenceCopyLocalPaths)" Condition="'%(Identity)' != '' and '@(_PrivatePackageReferenceCopyLocalPaths)' != ''" />
</ItemGroup>
</Target>
</Project>
我相信项目组合并可以在某种程度上进行优化。希望能有所帮助,欢迎反馈。