包含重复的“编译”项目

DaI*_*mTo 7 c# soap web-services asp.net-core rider

我刚刚将 SOAP Web 服务添加到新的 Asp .net core 项目中。当我尝试构建项目时,会导致以下错误。

Microsoft.NET.Sdk.DefaultItems.targets(295, 5):[NETSDK1022] 包含重复的“编译”项。默认情况下,.NET SDK 包含项目目录中的“编译”项。您可以从项目文件中删除这些项目,或者如果您想将它们显式包含在项目文件中,请将“EnableDefaultCompileItems”属性设置为“false”。有关详细信息,请参阅https://aka.ms/sdkimplicititems。重复的项目是:“Service References/WebService/WebService.cs”

经过一番谷歌搜索后,我在人们重命名文件时看到了类似的错误。但我没有重命名任何东西,这是一个新项目,我只添加了网络服务。

我检查了 .csproj 文件,我得到了这个

<Project Sdk="Microsoft.NET.Sdk.Web">

    <PropertyGroup>
        <TargetFramework>netcoreapp3.1</TargetFramework>
        <EnableDefaultContentItems>false</EnableDefaultContentItems>
    </PropertyGroup>

    <ItemGroup>
      <Reference Include="System.ServiceModel" />
    </ItemGroup>

    <ItemGroup>
      <WCFMetadata Include="Service References" />
    </ItemGroup>

    <ItemGroup>
      <WCFMetadataStorage Include="Service References\testing" />
      <WCFMetadataStorage Include="Service References\WebService" />
    </ItemGroup>

    <ItemGroup>
      <None Include="Service References\WebService\WebService.svcmap">
        <Generator>WCF Proxy Generator</Generator>
        <LastGenOutput>WebService.cs</LastGenOutput>
      </None>
      <None Include="Service References\WebService\WebService.webref" />
      <None Include="Service References\WebService\WebService.wsdl" />
    </ItemGroup>

    <ItemGroup>
      <Compile Include="Service References\WebService\WebService.cs">
        <AutoGen>True</AutoGen>
        <DesignTime>True</DesignTime>
        <DependentUpon>WebService.svcmap</DependentUpon>
      </Compile>
    </ItemGroup>


</Project>
Run Code Online (Sandbox Code Playgroud)

我只看到一个编译,所以迷失了也明白什么是重复的。我确实尝试过EnableDefaultCompileItems但没有解决问题。但考虑到它的作用,我对它的存在并不满意,即使它确实有效。

任何有助于理解此问题的原因并解决它的帮助将不胜感激。

注意:我使用的是 Rider 而不是 Visual studio

更新

我确实找到了这个链接,它似乎暗示了它的一个问题,以及它如何添加 Web 服务Rider Creates In Correct Webservice References for ASP .NET Core 项目。

但我不确定这是同一个问题。因为我创建了一个 .net core web api 而不是 asp .net core 项目。

更新2

在项目文件中的元素上,如果将“包含”更改为“更新”,是否可以解决问题?

以上是推特上的建议。它似乎消除了原始错误,但随后导致大量名称空间错误。

WebService.cs(727, 82): [CS0234] 命名空间“System.ServiceModel”中不存在类型或命名空间名称“IClientChannel”(是否缺少程序集引用?)

DaI*_*mTo 1

骑手问题来看,这可能是骑手如何添加网络服务的问题。

我启动到 Windows 并启动 Visual Studio。我能够毫无问题地添加服务。

然后我把这个项目带回 Linux 和 Rider。

我开始比较两者。我发现的第一个区别是 Rider 没有创建连接的服务目录及其所有内容。 ConnectedService.json有点重要

在此输入图像描述

第二个是对 .csproj 文件的一些重大更改

<Project Sdk="Microsoft.NET.Sdk.Web">

    <PropertyGroup>
        <TargetFramework>netcoreapp3.1</TargetFramework>        
    </PropertyGroup>

    <ItemGroup>
        <PackageReference Include="System.ServiceModel.Duplex" Version="4.4.*" />
        <PackageReference Include="System.ServiceModel.Http" Version="4.4.*" />
        <PackageReference Include="System.ServiceModel.NetTcp" Version="4.4.*" />
        <PackageReference Include="System.ServiceModel.Security" Version="4.4.*" />
    </ItemGroup>

    <ItemGroup>
      <WCFMetadata Include="Service References" />
    </ItemGroup>   

</Project>
Run Code Online (Sandbox Code Playgroud)

基本上,您需要添加适当的 PackageReference 并删除许多不需要的 ItemGroup。由于 .csproj 文件的验证方式发生了变化。