【问题标题】:error in csproj - duplicate itemcsproj 中的错误 - 重复项目
【发布时间】:2011-05-31 04:46:24
【问题描述】:

Visual Studio 2010 出现错误:

错误 1 ​​在“Sources”参数中多次指定了“CrossDomainService.svc.cs”项。 “来源”参数不支持重复项目。 WcfServiceDomain

来自 msbuild

C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.CSharp.targets(160,9) : 错误 MSB3105: 指定的项目“CrossDomainService.svc.cs”超过 o 在“源”参数中。 “来源”参数不支持重复项目。 [C:\inetpub\Wwwroot\axaptaWcfConnection\WcfServiceDomain\WcfSer ViceDomain.csproj]

我的文件是 csproj:

    <?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProductVersion>
    </ProductVersion>
    <SchemaVersion>2.0</SchemaVersion>
    <ProjectGuid>{8D40933A-E036-4CD0-9003-314A692724D5}</ProjectGuid>
    <ProjectTypeGuids>{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}</ProjectTypeGuids>
    <OutputType>Library</OutputType>
    <AppDesignerFolder>Properties</AppDesignerFolder>
    <RootNamespace>WcfServiceDomain</RootNamespace>
    <AssemblyName>WcfServiceDomain</AssemblyName>
    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
    <TargetFrameworkProfile />
    <FileUpgradeFlags>
    </FileUpgradeFlags>
    <UpgradeBackupLocation>
    </UpgradeBackupLocation>
    <OldToolsVersion>4.0</OldToolsVersion>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
    <DebugSymbols>true</DebugSymbols>
    <DebugType>full</DebugType>
    <Optimize>false</Optimize>
    <OutputPath>bin\</OutputPath>
    <DefineConstants>DEBUG;TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
    <PlatformTarget>x86</PlatformTarget>
  </PropertyGroup>
  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <DebugType>pdbonly</DebugType>
    <Optimize>true</Optimize>
    <OutputPath>bin\</OutputPath>
    <DefineConstants>TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
  </PropertyGroup>
  <ItemGroup>
    <Reference Include="System.Web.ApplicationServices" />
    <Reference Include="System.Web.DynamicData" />
    <Reference Include="System.Web.Entity" />
    <Reference Include="System.Configuration" />
    <Reference Include="System.Drawing" />
    <Reference Include="System.EnterpriseServices" />
    <Reference Include="System.Runtime.Serialization" />
    <Reference Include="System.ServiceModel" />
    <Reference Include="System.ServiceModel.Web" />
    <Reference Include="System.Web.Services" />
  </ItemGroup>
  <ItemGroup>
    <Content Include="ClientAccessPolicy.xml" />
    <Content Include="CrossDomainService.svc" />
    <Content Include="Service1.svc" />
    <Content Include="Web.config">
      <SubType>Designer</SubType>
    </Content>
    <Content Include="Web.Debug.config">
      <DependentUpon>Web.config</DependentUpon>
    </Content>
    <Content Include="Web.Release.config">
      <DependentUpon>Web.config</DependentUpon>
    </Content>
  </ItemGroup>
  <ItemGroup>
    <Compile Include="CrossDomainService.svc.cs">
      <DependentUpon>CrossDomainService.svc</DependentUpon>
    </Compile>
    <Compile Include="ICrossDomainService.cs" />
    <Compile Include="Service1.svc.cs">
      <DependentUpon>Service1.svc</DependentUpon>
    </Compile>
    <Compile Include="IService1.cs" />
    <Compile Include="Properties\AssemblyInfo.cs" />
  </ItemGroup>
  <ProjectExtensions>
    <VisualStudio>
      <FlavorProperties GUID="{349c5851-65df-11da-9384-00065b846f21}">
        <WebProjectProperties>
          <UseIIS>False</UseIIS>
          <AutoAssignPort>True</AutoAssignPort>
          <DevelopmentServerPort>51421</DevelopmentServerPort>
          <DevelopmentServerVPath>/</DevelopmentServerVPath>
          <IISUrl>
          </IISUrl>
          <NTLMAuthentication>False</NTLMAuthentication>
          <UseCustomServer>False</UseCustomServer>
          <CustomServerUrl>
          </CustomServerUrl>
          <SaveServerSettingsInUserFile>False</SaveServerSettingsInUserFile>
        </WebProjectProperties>
      </FlavorProperties>
    </VisualStudio>
  </ProjectExtensions>
  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />
</Project>

我没有看到任何重复的:/ 从这个错误有什么想法??

【问题讨论】:

    标签: visual-studio-2010 msbuild projects-and-solutions


    【解决方案1】:

    唯一的解决方案是重新创建项目:/

    【讨论】:

    • 我同意。如果您有一个非常庞大的项目并且需要重新创建整个解决方案,那真的很糟糕! :'(
    • 我同意你的观点,这是一个非常弱的解决方案。我希望 Jindra 解决方案可以帮助...
    • 不是一个实用的解决方案
    【解决方案2】:

    我想我不久前遇到了同样的问题。 解决方案是从 web.config 中删除子类型,即:

    <Content Include="Web.config">
      <SubType>Designer</SubType>
    </Content>
    

    收件人:

    <Content Include="Web.config">
    </Content>
    

    现在,这些又被添加了,我不知道为什么。搜索更多信息尚未清除它。 看: <Subtype>Designer</Subtype> Added then removed by Visual Studio on load/unload

    【讨论】:

    • 是的。不得不这样做真的很糟糕。希望在 VS11 中修复?
    【解决方案3】:

    我有同样的问题,解决方案是缩短和清理目录名称(它是一个备份名称,日期和时间用分号分隔)。

    【讨论】:

      【解决方案4】:

      您可以在常规文本编辑器中打开解决方案并手动删除副本

      【讨论】:

        【解决方案5】:

        对于遇到同样问题的人,没有任何帮助,他们不想重新创建项目:尝试删除 YourPojectName.csproj.user 文件。它帮助了我。我之前手动修改了 .csproj 并且修改引入(不知何故)这两个文件可能存在一些差异。

        【讨论】:

        • 我找不到被引用两次的文件,删除用户文件就可以了,谢谢!
        【解决方案6】:

        我在解决方案中遇到了同样的问题,其中一个源文件出现了同样的错误,

        我修改如下,

        1. 检查给出错误的文件名。

        2. 找出文件包含在哪个项目中。

        3. 打开该特定项目的 .csproj 文件(该文件可以在放置解决方案的目录中找到)。

        4. 在 .csproj 文件中搜索引发错误的文件名。

        5. 您会发现该行的两个条目,例如

         <Compile Include="duplicate.aspx.cs">
              <SubType>ASPXCodeBehind</SubType>
              <DependentUpon>Duplicate.aspx</DependentUpon>
            </Compile>
        
        
         <Compile Include="duplicate.aspx.cs">
              <SubType>ASPXCodeBehind</SubType>
              <DependentUpon>Duplicate.aspx</DependentUpon>
            </Compile>
        
        1. 从其中删除任意一行。

        2. 保存更改。

        3. 重新加载您的错误肯定已经消失的项目。

        【讨论】:

        • 就我而言,NetStarter 的技巧对我有用。我想肯定地将其标记为答案。你可以在这里看到详细的线程link
        • 这里没有黑魔法。其他答案是错误的。这是处理此问题的唯一正确方法。
        • 非常感谢您的解决方案 :)
        【解决方案7】:

        我不得不从项目中删除该类并重新创建它以解决此问题。

        【讨论】:

          【解决方案8】:

          简单! 只需在您的项目中右键单击并选择“卸载项目”

          再次右键单击并编辑 your_project.csproj

          在重复标签中搜索错误消息中提到的文件。

          保存并右键选择“重新加载项目”

          【讨论】:

            【解决方案9】:

            使用文本编辑器打开文件WcfServiceDomain.csproj 并查找CrossDomainService.svc.cs

            它可能会出现两次。只需删除其中一行,项目就会再次运行。

            【讨论】:

              【解决方案10】:

              我解决此问题的方法是转到错误中包含的文件所在的位置,然后发现有两个相同的文件。删除其中一个,它应该可以工作。

              之后我不得不撤消待处理的更改,因为文件随后丢失了,但在重新构建后它起作用了。

              【讨论】:

                【解决方案11】:

                我所做的是重命名了相关文件。然后清理解决方案(通过单击构建>清理解决方案)。然后构建解决方案。

                然后将文件重命名为原始文件名。然后清理解决方案并重新构建解决方案。

                它对我有用。我不知道它是否适合你。

                【讨论】:

                  【解决方案12】:

                  对我来说,我卸载了项目, 编辑 .csproj 文件, 搜索显示错误的文件名

                  <ItemGroup>
                      <Compile Include="Controllers\BaseUserContext.cs" />
                  </ItemGroup>

                  它没有多次显示(BaseUserContext.cs),只有 1 个标签,所以我删除了它并且没有错误地工作。

                  【讨论】:

                    【解决方案13】:

                    我知道这是旧帖子,但我发现了这个更好的解决方案,可以帮助目前遇到此问题的其他人。

                    • 在Solution Explorer 中,选择错误中指定的文件 消息或包含这些文件的文件夹。

                    • Right-click 然后选择Exclude From Project。

                    • 点击Refresh按钮。

                    • 再次选择文件或文件夹,right-click,然后选择Include In Project。

                    【讨论】:

                      【解决方案14】:

                      错误消息中的主要线索是 - “来源”。这是 .csproj 文件中的错误配置,构建目标被导入两次。它通常位于导入下的 .csproj 文件的末尾。文件名有某种误导性,我在看文件名时在整个项目文件中只能找到一次。当我查看导入时,我得到了类似的结果;

                      <Import Project="..\..\LonestarWeb\packages\Telerik.Sitefinity.Feather.10.2.6651\build\Telerik.Sitefinity.Feather.targets" Condition="Exists('..\..\LonestarWeb\packages\Telerik.Sitefinity.Feather.10.2.6651\build\Telerik.Sitefinity.Feather.targets')" />
                      <Import Project="\packages\Telerik.Sitefinity.Feather.10.2.6651\build\Telerik.Sitefinity.Feather.targets" Condition="Exists('..\..\LonestarWeb\packages\Telerik.Sitefinity.Feather.10.2.6651\build\Telerik.Sitefinity.Feather.targets')" />  
                      

                      删除你不需要的。重新加载解决方案,您现在可以编译了。

                      【讨论】:

                        【解决方案15】:

                        通配符!

                        请参见下面来自 cproj 文件的示例。 Class.cs Include 已经被它下面的通配符 Include 处理了,所以它现在已经是 Included 两次了。你显然想失去特定的Class.csInclude。

                        <Compile Include="..\Folder\Class.cs">
                          <Link>Class.cs</Link>
                        </Compile>
                        
                        <!-- lots of things in between ...scroll scroll scroll -->
                        
                        <Compile Include="..\Folder\*.*">
                          <Link>%(RecursiveDir)%(Filename)%(Extension)</Link>
                        </Compile>
                        

                        【讨论】:

                          【解决方案16】:

                          我遇到了类似的问题。我第一次在我的机器上打开了一个已经存在的 VS 解决方案。这个 VS 解决方案不是由人类创建的,而是使用 Swagger-Editor 从 openAPI 规范生成的。

                          最初,该解决方案根本没有任何问题。我可以构建解决方案,也可以运行代码。一旦我向解决方案的任何项目添加了新类(只需:“右键单击”>“添加”>“新项目”>“类”),实际问题就出现了。无论我为那个新类选择什么名字,我总是得到编译器错误

                          在“Sources”参数中多次指定了“MyNewClass.cs”项。 “Sources”参数不支持重复项。

                          一旦我删除了这个类,一切都恢复正常了。

                          除了VS,我的机器上还有JetBrains Rider (2020.1)。所以我在 Rider 中打开了相同的解决方案并添加了一个新类。在 Rider 中,错误没有出现。我可以根据需要添加任意数量的类。

                          最后,它归结为通配符,正如他在上面的回答中已经提到的“CAD 家伙”。

                          上述 Swagger-Editor 生成的原始解决方案在其 .csproj 文件中包含这段 XML:

                            <ItemGroup>
                              <Compile Include="**\*.cs" Exclude="obj\**" />
                            </ItemGroup>
                          

                          如果我使用 VS 添加一个新类,它会变成这个,这反过来会导致错误:

                            <ItemGroup>
                              <Compile Include="**\*.cs" Exclude="obj\**" />
                              <Compile Include="Api\NewClass.cs" />
                            </ItemGroup>
                          

                          VS 不知道正在使用的通配符。如果我使用 Rider 添加一个类,则不会添加额外的 &lt;Compile Include="Api\NewClass.cs" /&gt;。 Rider 知道通配符!

                          似乎 JetBrains 的人在处理 microsoft csproj 格式方面比 microsoft 更好。

                          如何解决这个问题

                          为了最终解决这个问题,我从项目中排除了所有源文件(“右键单击”>“从项目中排除”)。然后我关闭了解决方案并在文本编辑器中打开了 .csproj 文件。我从 .csproj 文件中删除了 &lt;Compile Include="**\*.cs" Exclude="obj\**" /&gt;。删除该行后,我再次在 VS 中打开解决方案并再次包含所有源文件(“显示所有文件”(在解决方案资源管理器中)>“右键单击”>“包含在项目中”)。 所有文件现在都定义为

                          ,而不是单个通配符
                            <ItemGroup>
                              <Compile Include="Api\NewClass.cs" />
                              <Compile Include="Api\SecondClass.cs" />
                              <Compile Include="Api\ThirdClass.cs" />
                              ...
                            </ItemGroup>
                          

                          在 .csproj 文件中。

                          如果你想自己重现这个

                          1. 访问:https://swagger.io/tools/swagger-editor/
                          2. 点击“现场演示”
                          3. “生成客户端”>“csharp”
                          4. 上述步骤使用 VS 解决方案下载 zip 文件
                          5. 用VS打开解决方案并添加一个类
                          6. 添加类后,您应该会遇到错误(除非您使用了 Rider)

                          【讨论】:

                            猜你喜欢
                            • 2023-03-31
                            • 1970-01-01
                            • 2016-06-01
                            • 2010-12-11
                            • 1970-01-01
                            • 1970-01-01
                            • 1970-01-01
                            • 2014-11-27
                            相关资源
                            最近更新 更多