// Based on https://github.com/NuGet/NuGet.Client/blob/dev/src/NuGet.Clients/NuGet.CommandLine/NuGet.CommandLine.csproj Project { PropertyGroup { IsCommandLinePackage #true } Import Project=#"$([MSBuild]::GetDirectoryNameOfFileAbove($(MSBuildThisFileDirectory), 'README.md'))\build\common.props"# Import Project=Sdk.props Sdk=Microsoft.NET.Sdk Import Project=ilmerge.props PropertyGroup { RootNamespace NuGet.CommandLine AssemblyName NuGet AssemblyTitle "NuGet Command Line" PackageId NuGet.CommandLine TargetFramework "$(NETFXTargetFramework)" GenerateDocumentationFile #false Description "NuGet Command Line Interface." ApplicationManifest app.manifest Shipping #true OutputType Exe ComVisible #false // Pack properties PackProject #true IncludeBuildOutput #false TargetsForTfmSpecificContentInPackage "$(TargetsForTfmSpecificContentInPackage)" "CreateCommandlineNupkg" SuppressDependenciesWhenPacking #true DevelopmentDependency #true PackageRequireLicenseAcceptance #false UsePublicApiAnalyzer #false } Target Name=CreateCommandlineNupkg { ItemGroup { TfmSpecificPackageFile Include=#"$(ArtifactsDirectory)$(VsixOutputDirName)\NuGet.exe"# { PackagePath "tools/" } TfmSpecificPackageFile Include=#"$(ArtifactsDirectory)$(VsixOutputDirName)\NuGet.pdb"# { PackagePath "tools/" } } } ItemGroup Condition="$(DefineConstants.Contains(SIGNED_BUILD))" { AssemblyAttribute Include=System.Runtime.CompilerServices.InternalsVisibleTo { _Parameter1 "NuGet.CommandLine.FuncTest, PublicKey=002400000480000094000000060200000024000052534131000400000100010007d1fa57c4aed9f0a32e84aa0faefd0de9e8fd6aec8f87fb03766c834c99921eb23be79ad9d5dcc1dd9ad236132102900b723cf980957fc4e177108fc607774f29e8320e92ea05ece4e821c0a5efe8f1645c4c0c93c1ab99285d622caa652c1dfad63d745d6f2de5f17e5eaf0fc4963d261c8a12436518206dc093344d5ad293" } AssemblyAttribute Include="System.Runtime.CompilerServices.InternalsVisibleTo" { _Parameter1 "NuGet.CommandLine.Test, PublicKey=002400000480000094000000060200000024000052534131000400000100010007d1fa57c4aed9f0a32e84aa0faefd0de9e8fd6aec8f87fb03766c834c99921eb23be79ad9d5dcc1dd9ad236132102900b723cf980957fc4e177108fc607774f29e8320e92ea05ece4e821c0a5efe8f1645c4c0c93c1ab99285d622caa652c1dfad63d745d6f2de5f17e5eaf0fc4963d261c8a12436518206dc093344d5ad293" } } ItemGroup Condition="!$(DefineConstants.Contains(SIGNED_BUILD))" { AssemblyAttribute Include=System.Runtime.CompilerServices.InternalsVisibleTo { _Parameter1 NuGet.CommandLine.FuncTest } AssemblyAttribute Include=System.Runtime.CompilerServices.InternalsVisibleTo { _Parameter1 NuGet.CommandLine.Test } } ItemGroup Condition="$(DefineConstants.Contains(SIGNED_BUILD))" { AssemblyAttribute Include=System.Runtime.CompilerServices.InternalsVisibleTo { _Parameter1 "NuGet.CommandLine.Test, PublicKey=002400000480000094000000060200000024000052534131000400000100010007d1fa57c4aed9f0a32e84aa0faefd0de9e8fd6aec8f87fb03766c834c99921eb23be79ad9d5dcc1dd9ad236132102900b723cf980957fc4e177108fc607774f29e8320e92ea05ece4e821c0a5efe8f1645c4c0c93c1ab99285d622caa652c1dfad63d745d6f2de5f17e5eaf0fc4963d261c8a12436518206dc093344d5ad293" } } ItemGroup Condition="!$(DefineConstants.Contains(SIGNED_BUILD))" { AssemblyAttribute Include=System.Runtime.CompilerServices.InternalsVisibleTo { _Parameter1 NuGet.CommandLine.Test } } ItemGroup { Reference Include=Microsoft.Build.Utilities.v4.0 Reference Include=Microsoft.CSharp Reference Include=System Reference Include=System.ComponentModel.Composition Reference Include=System.ComponentModel.Composition.Registration Reference Include=System.ComponentModel.DataAnnotations Reference Include=System.IO.Compression Reference Include=System.Net.Http Reference Include=System.Xml Reference Include=System.Xml.Linq Reference Include=NuGet.Core { HintPath #"$(SolutionPackagesFolder)nuget.core\2.14.0-rtm-832\lib\net40-Client\NuGet.Core.dll"# Aliases CoreV2 } } ItemGroup { PackageReference Include=Microsoft.VisualStudio.Setup.Configuration.Interop ProjectReference Include=#"$(NuGetCoreSrcDirectory)NuGet.PackageManagement\NuGet.PackageManagement.csproj"# ProjectReference Include=#"$(NuGetCoreSrcDirectory)NuGet.Build.Tasks\NuGet.Build.Tasks.csproj"# } ItemGroup { EmbeddedResource Update=NuGetCommand.resx { Generator ResXFileCodeGenerator LastGenOutput NuGetCommand.Designer.cs } Compile Update=NuGetCommand.Designer.cs { DesignTime #true AutoGen #true DependentUpon NuGetCommand.resx } EmbeddedResource Update=NuGetResources.resx { // Strings are shared by other projects, use public strings. Generator PublicResXFileCodeGenerator LastGenOutput NuGetResources.Designer.cs } Compile Update=NuGetResources.Designer.cs { DesignTime #true AutoGen #true DependentUpon NuGetResources.resx } } ItemGroup { EmbeddedResource Include=#"$(NuGetCoreSrcDirectory)NuGet.Build.Tasks\NuGet.targets"# { Link NuGet.targets SubType Designer } } // Since we are moving some code and strings from NuGet.CommandLine to NuGet.Commands, we opted to go through normal localization process (build .resources.dll) and then add them to the ILMerged nuget.exe // This will also be called from CI build, after assemblies are localized, since our test infra takes nuget.exe before Localization Target Name=ILMergeNuGetExe \ AfterTargets=Build \ Condition="'$(BuildingInsideVisualStudio)' != 'true' and '$(SkipILMergeOfNuGetExe)' != 'true'" \ { PropertyGroup { // when done after build, no localizedartifacts are built yet, so expected localized artifact count is 0. ExpectedLocalizedArtifactCount 0 Condition="'$(ExpectedLocalizedArtifactCount)' == ''" } ItemGroup { BuildArtifacts Include=#"$(OutputPath)\*.dll"# Exclude="@(MergeExclude)" // NuGet.exe needs all NuGet.Commands.resources.dll merged in LocalizedArtifacts Include=#"$(ArtifactsDirectory)\NuGet.Commands\**\$(NETFXTargetFramework)\**\*.resources.dll"# } Error Text="Build dependencies are inconsistent with mergeinclude specified in ilmerge.props" \ Condition="'@(BuildArtifacts->Count())' != '@(MergeInclude->Count())'" Error Text="Satellite assemblies count ILMerged into NuGet.exe should be $(ExpectedLocalizedArtifactCount), but was: @(LocalizedArtifacts->Count())" \ Condition="'@(LocalizedArtifacts->Count())' != '$(ExpectedLocalizedArtifactCount)'" PropertyGroup { PathToBuiltNuGetExe "$(OutputPath)NuGet.exe" IlmergeCommand #"$(ILMergeExePath) /lib:$(OutputPath) /out:$(ArtifactsDirectory)$(VsixOutputDirName)\NuGet.exe @(MergeAllowDup -> '/allowdup:%(Identity)', ' ') /log:$(OutputPath)IlMergeLog.txt"# IlmergeCommand Condition="Exists($(MS_PFX_PATH))" "$(IlmergeCommand) /delaysign /keyfile:$(MS_PFX_PATH)" // LocalizedArtifacts need fullpath, since there will be duplicate file names IlmergeCommand "$(IlmergeCommand) $(PathToBuiltNuGetExe) @(BuildArtifacts->'%(filename)%(extension)', ' ') @(LocalizedArtifacts->'%(fullpath)', ' ')" } MakeDir Directories="$(ArtifactsDirectory)$(VsixOutputDirName)" Exec Command="$(IlmergeCommand)" ContinueOnError=#false } Import Project="$(BuildCommonDirectory)common.targets" Import Project="$(BuildCommonDirectory)embedinterop.targets" // Do nothing. This basically strips away the framework assemblies from the resulting nuspec. Target Name=_GetFrameworkAssemblyReferences DependsOnTargets=ResolveReferences Target Name=GetSigningInputs Returns="@(DllsToSign)" { ItemGroup { DllsToSign Include=#"$(ArtifactsDirectory)$(VsixOutputDirName)\NuGet.exe"# { StrongName MsSharedLib72 Authenticode Microsoft400 } } } Target Name=GetSymbolsToIndex Returns="@(SymbolsToIndex)" { ItemGroup { SymbolsToIndex Include=#"$(ArtifactsDirectory)$(VsixOutputDirName)\NuGet.exe"# SymbolsToIndex Include=#"$(ArtifactsDirectory)$(VsixOutputDirName)\NuGet.pdb"# } } Import Project=Sdk.targets Sdk=Microsoft.NET.Sdk }