mar*_*ark 1 .net c# nuget .net-core
我正在使用面向 .NET Framework 4.7.2 的 Sdk 项目。项目结构为:
SmokeTests
|
+--UITests
| |
| +--Common
|
+ NonUITests
|
+--Common
Run Code Online (Sandbox Code Playgroud)
在哪里:
我使用 SmokeTests 项目作为汇总项目。当我构建它时,它的 bin\debug\net472 目录包含我想要在 nuget 包中拥有的所有二进制文件和符号,即:
SmokeTests csproj 如下所示:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net472</TargetFramework>
<PackageId>SmokeTests</PackageId>
<NoPackageAnalysis>true</NoPackageAnalysis>
<IncludeBuildOutput>true</IncludeBuildOutput>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<ContentTargetFolders>content</ContentTargetFolders>
</PropertyGroup>
<ItemGroup>
<Content Include="**\*.ps1" Exclude="PSTests\run.ps1" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\NonUITests\NonUITests.csproj" />
<ProjectReference Include="..\UITests\UITests.csproj" />
</ItemGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)
我还有一个 Directory.Build.props 文件:
<Project>
<PropertyGroup>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<AllowedReferenceRelatedFileExtensions>.pdb</AllowedReferenceRelatedFileExtensions>
<Version>$([System.Text.RegularExpressions.Regex]::Match($(BuildName), `\d+\.\d+(?:.\d+)?(?:.\d+)?`))</Version>
<Version Condition="'$(Version)' == ''">1.0.0.0</Version>
<SourceRevisionId>$(Revision)</SourceRevisionId>
<Company>My Company, Inc.</Company>
<Copyright>Copyright © $([System.DateTime]::Now.Year) by My Company, Inc. All rights reserved.</Copyright>
<Product>Smoke Tests</Product>
<NeutralLanguage>en-US</NeutralLanguage>
</PropertyGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)
当我构建解决方案时,生成的 SmokeTests.1.0.0.nupkg 文件不包含任何二进制文件,除了 SmokeTests.dll 本身。显然不是我想要的。
如何在不指定 nuspec 文件的情况下将bin\debug\net472 中的所有内容获取到生成的 NuGet 包中?
我总是可以破解一个可以操作 nupkg 文件的构建后步骤,但我想要一种正确的方法来做到这一点。
编辑 1
从回答的数量来看,这个问题要么是愚蠢的,要么是没有人使用 .Net 核心。也在这里发布 - https://social.msdn.microsoft.com/Forums/vstudio/en-US/aa25cb08-ff95-4d81-b0c3-9c4a395f9999/how-to-pack-the-products-from-multiple- project-into-one-nuget-without-any-nuspec-file?forum=msbuild
难道SO失去了魅力?
编辑 2
我将以下属性添加到PublicLib.csproj以生成 NuGet 包:
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<PackageId>$(AssemblyName)</PackageId>
<NoPackageAnalysis>true</NoPackageAnalysis>
<IncludeBuildOutput>true</IncludeBuildOutput>
<AllowedOutputExtensionsInPackageBuildOutputFolder>.pdb</AllowedOutputExtensionsInPackageBuildOutputFolder>
Run Code Online (Sandbox Code Playgroud)
它几乎可以工作,这是PublicLib.1.0.0.nupkg\lib\netstandard2.0
文件夹的内容:
但是 IncludedLib.pdb 丢失了。
因此,经过长时间的检查,NuGet.Build.Tasks.Pack.targets
我得出了我的汇总项目 SmokeTests 的以下代码:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net472</TargetFramework>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<PackageId>$(AssemblyName)</PackageId>
<NoPackageAnalysis>true</NoPackageAnalysis>
<IncludeBuildOutput>true</IncludeBuildOutput>
<AllowedOutputExtensionsInPackageBuildOutputFolder>.pdb</AllowedOutputExtensionsInPackageBuildOutputFolder>
<ContentTargetFolders>content</ContentTargetFolders>
<GenerateNuspecDependsOn>MyCustomizePacking</GenerateNuspecDependsOn>
</PropertyGroup>
<Target Name="MyCustomizePacking" Returns="@(NuGetPackInput);@(_BuildOutputInPackage);@(_TargetPathsToSymbols)">
<ItemGroup>
<NuGetPackInput Remove="@(BuiltProjectOutputGroupKeyOutput);@(DebugSymbolsProjectOutputGroupOutput)"/>
<_BuildOutputInPackage Remove="@(BuiltProjectOutputGroupKeyOutput)"/>
<_TargetPathsToSymbols Remove="@(DebugSymbolsProjectOutputGroupOutput)"/>
<NuGetPackInput Include="@(ReferenceCopyLocalPaths);@(AllItemsFullPathWithTargetPath)" />
<_BuildOutputInPackage Include="%(ReferenceCopyLocalPaths.Identity)" >
<TargetFramework>$(TargetFramework)</TargetFramework>
</_BuildOutputInPackage>
<_BuildOutputInPackage Include="%(AllItemsFullPathWithTargetPath.Identity)" >
<TargetFramework>$(TargetFramework)</TargetFramework>
</_BuildOutputInPackage>
</ItemGroup>
</Target>
<ItemGroup>
<Content Include="**\*.ps1" Exclude="PSTests\run.ps1" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\NonUITests\NonUITests.csproj" />
<ProjectReference Include="..\UITests\UITests.csproj" />
</ItemGroup>
</Project>
Run Code Online (Sandbox Code Playgroud)
我能找到的将所有项目和包引用打包到 NuGet 中的唯一方法是通过GenerateNuspecDependsOn
注入我的目标MyCustomizePacking
. 该目标执行以下操作:
@(ReferenceCopyLocalPaths)
并@(AllItemsFullPathWithTargetPath)
在相关项目组。似乎有效,但我对我的实施不满意。我希望有更好的支持。
归档时间: |
|
查看次数: |
2138 次 |
最近记录: |