Visual Studio .NET Core 6找到多个具有相同相对路径的发布输出文件

mv1qrgav  于 2022-12-04  发布在  .NET
关注(0)|答案(4)|浏览(704)

我在.NET Core 6上遇到了一个相对较新的问题,当通过Visual Studio 2022使用Web Deploy发布时,我收到了以下错误:
错误找到多个具有相同相对路径的发布输出文件:应用程序设置. json
构建时没有问题,只是发布。
我有两个ASP.NETCore6项目。项目“A”引用项目“B”(我知道B实际上应该是一个类库,但请跟我一起去)。
我知道这是.NET Core 6(https://learn.microsoft.com/en-us/dotnet/core/compatibility/sdk/6.0/duplicate-files-in-output)中的预期功能。但是,我似乎无法告诉项目“A”忽略项目“B”的appsettings文件。我知道可以设置ErrorOnDuplicatePublishOutputFiles属性,但是我试图严格地告诉它不要包括这些文件。
这里有一些例子的项目,我已经尝试过,但不工作.

**示例1:**尝试了典型的内容更新方法(据说在VS 15.3之后不起作用)。还尝试了绝对路径。

A.csproj

...

<ItemGroup>
  <ProjectReference Include="..\B\B.csproj">
    <PrivateAssets>all</PrivateAssets>
  </ProjectReference>
</ItemGroup>
  
<ItemGroup>    
  <Content Update="..\B\appsettings.json" CopyToOutputDirectory="Never" CopyToPublishDirectory="Never" />
  <Content Update="..\B\appsettings.*.json" CopyToOutputDirectory="Never" CopyToPublishDirectory="Never" />
</ItemGroup>

...

**示例2:**尝试了典型的内容删除方法。还尝试了绝对路径。

A.csproj

...

<ItemGroup>
  <ProjectReference Include="..\B\B.csproj">
    <PrivateAssets>all</PrivateAssets>
  </ProjectReference>
</ItemGroup>
  
<ItemGroup>    
  <Content Remove="..\B\appsettings.json" />
  <Content Remove="..\B\appsettings.*.json" />
</ItemGroup>

<ItemGroup>    
  <None Include="..\B\appsettings.json" />
  <None Include="..\B\appsettings.*.json" />
</ItemGroup>

...

**示例3:**我尝试使用GeneratePathProperty路径以确保它直接忽略项目B的文件。

A.csproj

...

<ItemGroup>
  <ProjectReference Include="..\B\B.csproj" GeneratePathProperty="true">
    <PrivateAssets>all</PrivateAssets>
  </ProjectReference>
</ItemGroup>
  
<ItemGroup>    
  <Content Update="$(PkgB)\appsettings.json" CopyToPublishDirectory="Never" />
  <Content Update="$(PkgB)\appsettings.*.json" CopyToPublishDirectory="Never" />
</ItemGroup>

...

**范例4:**修改pubxml以忽略特定档案。也尝试使用绝对路径。

A.pubxml

...

<ExcludeFilesFromDeployment>..\B\appsettings.json;..\B\appsettings.Staging.json;...</ExcludeFilesFromDeployment> 

...

**示例5:**修改了pubxml文件以显式忽略项目B文件。还尝试了绝对路径。

A.pubxml

...

<ItemGroup>
  <ResolvedFileToPublish Include="..\B\appsettings.json">
    <CopyToPublishDirectory>Never</CopyToPublishDirectory>
  </ResolvedFileToPublish>
  <ResolvedFileToPublish Include="..\B\appsettings.Staging.json">
    <CopyToPublishDirectory>Never</CopyToPublishDirectory>
  </ResolvedFileToPublish>
  <ResolvedFileToPublish Include="..\B\appsettings.Development.json">
    <CopyToPublishDirectory>Never</CopyToPublishDirectory>
  </ResolvedFileToPublish>
  <ResolvedFileToPublish Include="..\B\appsettings.Backup.json">
    <CopyToPublishDirectory>Never</CopyToPublishDirectory>
  </ResolvedFileToPublish>
</ItemGroup>

...

我试过其他各种组合,但似乎都不起作用......

  • Windows 10操作系统
  • Visual Studio 2022(最新版本)
  • .NET核心6
eqqqjvef

eqqqjvef1#

我在将.NET 5 Web服务升级到.NET 6时遇到了这个问题。正如您提供的链接所指出的,这是设计上的问题。我通过在两个项目中重命名appsettings.json文件来修复这个问题,方法是在前面加上程序集名称,然后重新配置配置(是的,这是一个问题),如下所示:

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.ConfigureAppConfiguration((context, configBuilder) =>
            {
                string assemblyName = Assembly.GetExecutingAssembly().GetName().Name;
                string envName = context.HostingEnvironment.EnvironmentName;
                configBuilder.Sources.Clear();
                configBuilder.AddJsonFile($"{assemblyName}.appsettings.json", optional: false, reloadOnChange: true);
                configBuilder.AddJsonFile($"{assemblyName}.appsettings.{envName}.json", optional: true, reloadOnChange: true);
            });
            webBuilder.UseStartup<Startup>();

正如您所看到的,我们的代码在这一点上仍然是“.NET 5样式”。

vmdwslir

vmdwslir2#

我在一个有Razor类库的Web应用程序中遇到了这个问题。罪魁祸首文件是LIBMAN.JSON。
将文件的属性更改为:

**生成操作:**无
**复制到输出目录:**请勿复制

其他仅用于工具的文件可能会以相同的方式进行更改。

qyuhtwio

qyuhtwio3#

I had a similar issue and for me this was due to the solution having multiple nuget packages instaled with different versions. Once they were consolidated the error was resolved.
C:\Program Files\dotnet\sdk\6.0.111\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.ConflictResolution.targets(112,5): error NETSDK1152: Found multiple publish output files with the same relative path: C:\Users\srvtfsbuild.nuget\packages\microsoft.testplatform.testhost\17.3.0\build\netcoreapp2.1\x64\testhost.exe, C:\Users\srvtfsbuild.nuget\packages\microsoft.testplatform.testhost\17.4.0\build\netcoreapp3.1\x64\testhost.exe, C:\Users\srvtfsbuild.nuget\packages\microsoft.testplatform.testhost\17.3.0\build\netcoreapp2.1\x64\testhost.dll, C:\Users\srvtfsbuild.nuget\packages\microsoft.testplatform.testhost\17.4.0\build\netcoreapp3.1\x64\testhost.dll, C:\Users\srvtfsbuild.nuget\packages\nunit3testadapter\4.2.1\build\netcoreapp2.1\NUnit3.TestAdapter.pdb, C:\Users\srvtfsbuild.nuget\packages\nunit3testadapter\4.3.1\build\netcoreapp3.1\NUnit3.TestAdapter.pdb, C:\Users\srvtfsbuild.nuget\packages\nunit3testadapter\4.2.1\build\netcoreapp2.1\testcentric.engine.metadata.dll, C:\Users\srvtfsbuild.nuget\packages\nunit3testadapter\4.3.1\build\netcoreapp3.1\testcentric.engine.metadata.dll.

9udxz4iz

9udxz4iz4#

.csproj文件中引用了一个错误的项目。根本不应引用该项目。实际上,生成过程将引用的项目视为它尝试初始化的第二个前端。删除不必要的引用可修复该问题。

<ItemGroup>
    <ProjectReference Include="..\BadProject\BadFrontEndProject.csproj" /> <!-- remove me -->
</ItemGroup>

相关问题