【发布时间】:2022-01-01 03:02:59
【问题描述】:
我在 .NET Core 6 上遇到了一个相对较新的问题,当通过 Visual Studio 2022 使用 Web Deploy 发布时。我收到以下错误:
错误发现多个具有相同相对路径的发布输出文件: C:\Work\MySolution\A\appsettings.json, C:\Work\MySolution\B\appsettings.json, C:\Work\MySolution\A\appsettings.Staging.json, C:\Work\MySolution\B\appsettings.Staging.json, , C:\Work\MySolution\A\appsettings.Development.json, C:\Work\MySolution\B\appsettings.Development.json
构建时没有问题,只是发布。
我有两个 ASP.NET Core 6 项目。项目“A”引用了项目“B”(我知道 B 确实应该是一个类库,但跟我走吧)。
我知道这是 .NET Core 6 (https://docs.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 Core 6
【问题讨论】:
标签: visual-studio asp.net-core .net-6.0 visual-studio-2022 asp.net-core-6.0