ConfigurationManager存在于System.Configuration.ConfigurationManager和System.Configuration中。

3
我正在将我们的一个常用库移植到NET Standard 2.0。
现有库中有几个地方使用旧的ConfigurationManager来访问app.config文件。
我已经添加了System.Configuration.ConfigurationManager的预发布版本,在选择netstandard 2.0时可以成功解决。但是当我选择net461时,它会抛出错误:
Severity    Code    Description Project File    Line    Suppression State
Error   CS0433  The type 'ConfigurationManager' exists in both 'System.Configuration.ConfigurationManager, Version=4.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51' and 'System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' Synovia.Service.Common.Core(net461) C:\git\synovia.service.common\Common\EmailHelper.cs 15  Active

浏览我的参考资料,我没有看到我在引用两个的地方。有人遇到过这种情况吗?你是如何解决的?

所有尝试寻找答案都导致了.NET 2.0的答案等。

编辑 - 当前参考资料 如您所见,我没有引用System.Configuration。只有System.Configuration.ConfigurationManager。

  <ItemGroup>
    <PackageReference Include="ALK.Core" Version="1.1.0" />
    <PackageReference Include="Amazon.Lambda.Core" Version="1.0.0" />
    <PackageReference Include="AWSSDK.Core" Version="3.3.14.1" />
    <PackageReference Include="AWSSDK.Lambda" Version="3.3.6.2" />
    <PackageReference Include="AWSSDK.S3" Version="3.3.7" />
    <PackageReference Include="AWSSDK.SimpleNotificationService" Version="3.3.0.17" />
    <PackageReference Include="AWSSDK.SimpleWorkflow" Version="3.3.0.17" />
    <PackageReference Include="DogStatsD-CSharp-Client" Version="3.0.0" />
    <PackageReference Include="IdeaBlade.DevForce.Core" Version="7.5.0" />
    <PackageReference Include="JetBrains.Annotations" Version="10.4.0" />
    <PackageReference Include="log4net" Version="2.0.8" />
    <PackageReference Include="Log4Net.Async.Standard" Version="3.0.0" />
    <PackageReference Include="Microsoft.SqlServer.Types" Version="14.0.314.76" />
    <PackageReference Include="Moneris" Version="3.5.1" />
    <PackageReference Include="Newtonsoft.Json" Version="10.0.3" />
    <PackageReference Include="protobuf-net" Version="2.3.0-alpha" />
    <PackageReference Include="PushSharp" Version="2.2.1" />
    <PackageReference Include="RabbitMQ.Client" Version="4.1.3" />
    <PackageReference Include="RabbitMqConsumers" Version="1.0.20" />
    <PackageReference Include="ServiceStack" Version="4.5.12" />
    <PackageReference Include="ServiceStack.Text" Version="4.5.12" />
    <PackageReference Include="StackExchange.Redis" Version="1.2.3" />
    <PackageReference Include="System.Configuration.ConfigurationManager" Version="4.4.0-preview1-25305-02" />
    <PackageReference Include="System.Data.Common" Version="4.3.0" />
    <PackageReference Include="System.Data.SqlClient" Version="4.4.0-preview1-25305-02" />
    <PackageReference Include="System.IO" Version="4.3.0" />
    <PackageReference Include="System.Linq" Version="4.3.0" />
    <PackageReference Include="System.Reflection" Version="4.3.0" />
    <PackageReference Include="System.Runtime.Serialization.Xml" Version="4.3.0" />
    <PackageReference Include="System.Security.Cryptography.Algorithms" Version="4.3.0" />
    <PackageReference Include="System.ServiceProcess.ServiceController" Version="4.3.0" />
    <PackageReference Include="System.Threading" Version="4.3.0" />
    <PackageReference Include="System.Threading.Tasks" Version="4.3.0" />
    <PackageReference Include="System.Threading.Tasks.Extensions" Version="4.4.0-preview1-25305-02" />
    <PackageReference Include="System.Threading.Tasks.Parallel" Version="4.3.0" />
    <PackageReference Include="System.Threading.Thread" Version="4.3.0" />
    <PackageReference Include="System.Threading.Timer" Version="4.3.0" />
    <PackageReference Include="System.Xml.ReaderWriter" Version="4.3.0" />
    <PackageReference Include="System.Xml.XDocument" Version="4.3.0" />
    <PackageReference Include="System.Xml.XmlDocument" Version="4.3.0" />
    <PackageReference Include="System.Xml.XmlSerializer" Version="4.3.0" />
    <PackageReference Include="Telogis.Geobase" Version="4.7.0" />
  </ItemGroup>

1
如果你没有得到答案,只需使用条件语句来避免错误。Rick Strahl今天早上刚刚在这个主题上发表了文章。去看看他是如何在一个多目标项目中实现的。 - user1228
4
如果您正在开发一个.NET Standard项目,那么引用列表中不应包含System.Configuration - undefined
@LexLi - 我已更新我的参考列表。我没有在任何地方引用System.Configuration。还值得注意的是,该项目同时针对net461和netstandard20。 - undefined
当前显示的列表有很多问题。1. 不要混合使用4.3.0和4.4.0预览版。2. 使用NETStandard.Library来简化列表。3. 所有依赖项都应支持.NET Standard,并且您必须逐个检查它们,否则会污染编译过程。 - undefined
@Will我认为按照Rick的指导将会帮助我达到目标 - 这里只是提供一个参考博客链接:https://weblog.west-wind.com/posts/2017/Jun/22/MultiTargeting-and-Porting-a-NET-Library-to-NET-Core-20 - undefined
显示剩余3条评论
3个回答

4
我终于让它工作了。所有提供的建议都帮助我朝着正确的方向前进。主要问题是我有一个引用试图拉取错误的System.Configuration。一旦我解决了这个问题,我就将其添加到我的csproj中。
  <ItemGroup Condition=" '$(TargetFramework)' == 'net461' ">        
    <Reference Include="System.Configuration" />
  </ItemGroup>
  <ItemGroup Condition=" '$(TargetFramework)' == 'netstandard2.0' ">
    <PackageReference Include="System.Configuration.ConfigurationManager" Version="4.4.0-preview1-25305-02" />
  </ItemGroup>

我最初尝试了这个,但它没有起作用,因为我输入的是'netstandard20'而不是'netstandard2.0'....

现在它可以工作了,感谢大家的帮助。


1
我不清楚列表中的其他依赖关系,但您正在引用ServiceStack的.NET Framework依赖项:
<PackageReference Include="ServiceStack" Version="4.5.12" />
<PackageReference Include="ServiceStack.Text" Version="4.5.12" />

如果有依赖于 System.Configuration 的情况,您需要引用 ServiceStack 的 .NET Standard 包,而不是引用原来的包。

<PackageReference Include="ServiceStack.Core" Version="1.0.43" />
<PackageReference Include="ServiceStack.Text.Core" Version="1.0.43" />

如果你的目标是同时针对 .NET Framework 和 .NET Standard,那么你需要在各自的平台下引用这两个依赖项。

谢谢你指出这个问题,我已经更新了引用,只使用了新的核心版本,但是我仍然遇到了相同的问题。我想我可能需要去.NET Standard的GitHub页面上询问他们的建议。 - undefined
@Wjdavis5 你还需要对每个依赖项进行相同的检查,确保它们都引用了一个包含.NET Standard DLLs的NuGet包。 - undefined

0
在我的情况下,我做了以下操作:
  1. 清理解决方案。
  2. 进入解决方案文件夹
  3. 删除 bin 和 obj 文件夹
  4. 重新构建解决方案
这样做后,一切都正常工作了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接