如何在 VS 中创建一个项目文件来收集多个单独项目的输出

问题描述 投票:0回答:1

我有几个项目将被编译成一个 nuget 包。根据我收到的建议,我尝试使用 NoTargets SDK 来实现这一点。我没有执行

msbuild
任务的经验。我必须收集项目的输出,并将这些程序集复制到包的正确文件夹结构中。我陷入无法指定输出的困境。如果没有
<AdditionalProperties>
,项目就会被构建,但在各自的输出文件夹中 - 我还没有弄清楚如何在不进行硬编码的情况下获取这些位置(我使用 artifacts)。一旦我指定了输出(无论如何),构建就会失败,因为无法找到这些项目的引用的输出(我有一个被每个项目引用的帮助器项目。它正在寻找该库我指定的目标文件夹)。

1>Target MyBuild:
1>  Target _GetProjectReferenceTargetFrameworkProperties:
1>  Target ResolveProjectReferences:
1>  Target ResolveAssemblyReferences:
1>    Primary reference "StandardHelpers".
1>        Could not find dependent files. Expected file "D:\Workspace\...\artifacts\bin\SDK\Debug\API\Helpers.dll" does not exist.

所以现在,我正在尝试将其内置到公共文件夹中,但也许有更好的方法。

<Project Sdk="Microsoft.Build.NoTargets/3.7.0">

  <PropertyGroup>
    <TargetFramework>net8.0</TargetFramework>
    <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
    <PackageId>$(AssemblyName)</PackageId>
    <Title>My package</Title>
  </PropertyGroup>

  <ItemGroup>
    <None Update="tools\*.ps1" CopyToOutputDirectory="Always" Pack="True" PackagePath="" />
  </ItemGroup>

  <Target Name="SetNuSpecProperties" BeforeTargets="GenerateNuspec">
    <PropertyGroup>
      <NuspecProperties>$(NuspecProperties);Version=$(Version);BaseOutputPath=$(OutputPath);PackageReleaseNotes=$(PackageReleaseNotes);configuration=$(Configuration);</NuspecProperties>
    </PropertyGroup>
  </Target>    
  
  <ItemGroup>
    <ProjectToBuild Include="..\API\API.csproj">
      <AdditionalProperties>OutDir=$(BaseOutputPath)/$(Configuration)/API/</AdditionalProperties>
    </ProjectToBuild>
    <ProjectToBuild Include="..\Analyzers\Analyzers.csproj">
      <AdditionalProperties>OutDir=$(BaseOutputPath)/$(Configuration)/analyzer/</AdditionalProperties>
    </ProjectToBuild>
  </ItemGroup>
  
  <Target Name="MyBuild" AfterTargets="Build">
    <MSBuild 
        Projects="@(ProjectToBuild)" 
        Properties="Configuration=$(Configuration);Optimize=$(Optimize)" 
        >
    </MSBuild>
  </Target>
</Project>
msbuild visual-studio-2022 nuget-package
1个回答
0
投票

我按照你的步骤

AdditionalProperties
但发现构建效果很好。请检查以下步骤:

我的解决方案结构:

ConsoleApp1 solution
    - ConsoleApp1 project
    - Helper project
    - ConsoleApp2 project(refers to Helper project)
    - ConsoleApp3 project(refers to Helper project)

1.为项目2和项目3添加Helper项目的引用。

<ProjectReference Include="..\Helpers\Help.csproj" />

2.运行构建并观察输出窗口:

2.1 创建OutDir=$(BaseOutputPath)/$(Configuration)/API/文件夹

enter image description here

2.2 创建OutDir=$(BaseOutputPath)/$(Configuration)/analyzer/

enter image description here

2.3 将

help.dll
复制到项目2指定的输出文件夹中(例如:API文件夹) enter image description here

2.4 复制

help.dll
到项目3指定的输出文件夹(例如:analyzer文件夹)

enter image description here

如果这不起作用,请考虑使用通用文件夹:将输出路径或基本输出路径设置为用于解决方案中所有项目的文件夹。

构建到公共输出目录

© www.soinside.com 2019 - 2024. All rights reserved.