无法添加类型为“add”且唯一键属性“name”设置为“aspNetCore”的重复集合条目

Posted

技术标签:

【中文标题】无法添加类型为“add”且唯一键属性“name”设置为“aspNetCore”的重复集合条目【英文标题】:Cannot add duplicate collection entry of type 'add' with unique key attribute 'name' set to 'aspNetCore 【发布时间】:2016-10-16 11:38:32 【问题描述】:

我最近将我的 ASP.NET Core 应用程序发布到我的主机。我遇到了 HTTP 错误 500.19。

IIS 8.5 说问题是:-

“无法添加类型为 'add' 且唯一键属性 'name' 设置为 'aspNetCore' 的重复集合条目”

它还在我的 system.webServer 配置中突出显示了这一关键添加行:-

<handlers>
  <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule"      
</handlers>

我真的不知道该怎么做。看起来好像有一个重复的实例,所以我尝试重命名它,但它仍然要求再次添加它?

这是我的 web.config:-

<?xml version="1.0" encoding="utf-8"?>
<configuration>

  <!--
  Configure your application settings in appsettings.json. Learn more at http://go.microsoft.com/fwlink/?LinkId=786380
  -->

  <system.webServer>
  <handlers>
    <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
  </handlers>
  <aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false"/>
  </system.webServer>

<system.net>
<defaultProxy useDefaultCredentials="true" >
</defaultProxy>
</system.net>
</configuration>

【问题讨论】:

您能否发布完整的错误日志,可能您会更详细地在控制台中运行它。你在 ISS 中设置了什么作为 Url 绑定 您是否尝试在添加前添加&lt;remove name="aspNetCore" /&gt; 如果你叫它aspNetCoreHandler呢? 得到同样的东西。你有没有想过解决这个问题? 我尝试不在网站下添加应用程序,并更改网站本身的 appPool,现在我遇到了与添加之前相同的错误 &lt;remove name="aspNetCore" /&gt;,所以这可能会有所帮助 【参考方案1】:

上面的答案对我没有用,但是 DavidG 的评论确实解决了我的问题,所以要发布作为答案,以防它帮助别人。

对我来说,我没有将它作为子应用程序运行,而一个为我工作了一年多没有问题的项目突然停止处理这个问题。仍然不确定发生了什么变化。当我注释掉或删除 &lt;add name="aspNetCore".../&gt; 时,错误仍然存​​在,然后该行被自动重新添加。

为了解决这个问题,我在配置文件中添加了&lt;remove name="aspNetCore" /&gt;,就在&lt;add name="aspNetCore"... /&gt; 条目的正上方,然后一切又开始工作了。

【讨论】:

这是 Voodoo 编程的一个很好的例子。它有效,但到底为什么。【参考方案2】:

要继续在 IIS EXPRESS 上运行,请转到 .sln 文件所在的根文件夹。

.vs\config\applicationhost.config 中删除文件或保存 如果你有东西的话,它会放在一个临时的地方。

关闭/重新打开 VS Studio,再次运行,就可以了。

如果您需要从保存的 applicationhost.config 中添加一些内容,只需比较这两个,但我看不出您可以在那里拥有什么。

【讨论】:

这应该是正确的答案。我在这个配置中有一个重复的条目,删除文件后它创建了一个没有重复的新文件并且它工作。谢谢@SilentTremor 成功了。但我也删除了 .vs\projectName\config\applicationhost.config 文件 这对我有用。我还发现 .vs 文件夹被 Rolsyn 锁定(使用 Process Explorer | Find | Find Handle or DLL 找到)。必须先杀死它才能删除文件夹。 我也认为这应该是正确的解决方案。至少在我的情况下 IIS,Express 停止工作,显然我没有改变任何东西。清理之前的applicationhost.config解决了问题 @SilentTremor 我真的很想知道您是如何发现这是导致问题的文件。【参考方案3】:

不幸的是,没有一个建议的解决方案对我有用。奇迹般地,我得知我的 applicationhost.config 文件不幸被修改,当我导航到 .NET Core 网站应用程序中的特定页面时,出现“无法添加重复的集合条目”错误。

applicationhost.config&lt;sites&gt; 标签下,我有以下内容:

<site name="MyWebsite" id="2">
    <application path="/" applicationPool="Clr4IntegratedAppPool">
        <virtualDirectory path="/" physicalPath="C:\Users\___\solutionname\MyWebsite" />
    </application>
    <application path="/SomePage" applicationPool="Clr4IntegratedAppPool">
        <virtualDirectory path="/" physicalPath="C:\Users\___\solutionname\MyWebsite" />
    </application>
    <bindings>
        <binding protocol="https" bindingInformation="*:12345:localhost" />
    </bindings>
</site>

当我导航到页面“/SomePage”时,向我显示了 500.19 HTTP 错误。如您所见,出于某种原因,此特定页面有一个 separate &lt;application&gt; 标记。我不知道为什么。

我删除了“/SomePage”路径的整个&lt;application&gt;标签,一切又开始工作了。

【讨论】:

谢谢,这也为我解决了这个问题。我采取的导致这种情况的步骤是我希望我的应用程序在某个页面上的调试(F5)下打开,我在项目设置中添加了该页面,但这随后导致 applicationHost.config 中的上述条目破坏了我的应用 @System24Tech 完全相同的问题;我更改了服务器部分中的“项目 URL”,而不是开始操作部分中的“特定页面”。嗬!盲目点击离开,不考虑我在做什么...... 也许添加一个注释,这可以在 projectpath/.vs/project/config/applicationhost.config 找到【参考方案4】:

我在使用 vs 2017 的项目中遇到了这个问题,该项目在不更改 web.config 的情况下运行良好。看了这篇文章,我意识到这可能是一个 IIS express 问题,我解决了简单地删除 .vs 文件夹并重新启动 vs.

【讨论】:

【参考方案5】:

我有同样的问题,在我的情况下评论该行

<add name="aspNetCore"...

解决了这个问题并提出了“为什么它在没有 AspNetCoreModule 的情况下工作”的问题。 我的问题是我将该站点添加为 defaultwebsite 中的子应用程序,它位于 wwwrootfolder 中。我认为该配置是由 defaultwebsite 自动拾取并应用于所有子应用程序站点的。

This link helped

因此解决方案是将其作为一个单独的站点移动到另一个端口上。

【讨论】:

解决了我的问题。谢谢!【参考方案6】:

在我的情况下,问题是由于在我的 Web 项目的“调试”选项卡中放置了一个路径,以便应用程序可以在特定页面打开。这会导致对文件 .vs\config\applicationhost.config 进行两次静默添加,类似于八方观察到的那种。

在:

<add name="api AppPool" managedRuntimeVersion="" />

在:

<application path="/blah" applicationPool="api AppPool">
<virtualDirectory path="/" physicalPath="your-path\src\your-proj" />
</application>

已经存在类似条目的地方。这是问题的根源。

不幸的是,错误消息完全具有误导性。

解决方法是重命名applicationhost.config,重启VS,让它重建文件。这就是为什么里卡多删除整个 .vs 文件夹的解决方案也有效的原因。

【讨论】:

【参考方案7】:

该错误是因为 ASP.NET Core 中有一个名为“.vs\config\applicationhost.config”的根文件 最初它有 67 个键。您可以在配置编辑器中亲自查看它。

这个名为“.vs\config\applicationhost.config”的文件具有Web.config 携带的默认设置,以便能够工作,其中之一就是那个处理程序。 你也可以在这里看到它。

问题在于该文件具有该处理程序,而您发布的内容将继承该处理程序。

您有两种解决方案,在您发布的 web.config 行中添加注释或从“.vs\config\applicationhost.config”中删除该处理程序

【讨论】:

【参考方案8】:

我刚有这个,结果我在网站属性的调试设置中更改了应用程序 URL,以加载特定页面(错误但发生了)。

在 IIS 中,它自动在测试域下创建了一个名为 About(在本例中)的新应用程序。

删除域下的恶意 IIS 应用程序解决了该问题,因为它在导航到页面时不会尝试重新加载相同的 web.config。

【讨论】:

【参考方案9】:

我评论了以下声明

<verbs allowUnlisted="true">
及其作品

【讨论】:

以上是关于无法添加类型为“add”且唯一键属性“name”设置为“aspNetCore”的重复集合条目的主要内容,如果未能解决你的问题,请参考以下文章

oracle 如何创建,可空唯一约束

数据库添加外键错误:[Err] 1215 - Cannot add foreign key constraint 的解决

IIS错误:在唯一密钥属性“fileExtension”设置为“.json”时,无法添加类型为“mimeMap”的重复集合项

SQL 约束

sql2005中设置字段属性时,如何设标识列(自增1)和必须唯一

MYSQL的约束