关于从.NET Framework项目引用.NET标准类库的问题有许多类似的问题,其中netstandard库中的NuGet包依赖关系不会流到netframework应用程序,并且Could not load file or assembly错误发生在运行时:
存在许多源,如下所示,表明可以通过在netframework项目中添加缺少的依赖项来解决此问题:
然而,这是不利的,因为我不希望项目必须带有他们不应该要求的直接参考; 依赖项应该自然流动,以便将来添加/删除的依赖项正常工作.
其他来源表明可以通过添加<RestoreProjectStyle>PackageReference</RestoreProjectStyle>和<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>netframework项目文件来解决:
我已经使用驻留在同一个Visual Studio解决方案中的项目测试了上述两个修复程序并取得了成功,但我更喜欢第二种方法,因为它是"设置并忘记它"的解决方案.
我发现的问题是当我尝试从另一个VS解决方案中的netframework项目引用netstandard类库时,我在后一个项目中使用<RestoreProjectStyle>PackageReference</RestoreProjectStyle>和<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>方法.在我的特定情况下,我有一个.NET Framework可执行项目,该项目在同一解决方案中引用.NET Framework类库,该类库在另一个解决方案中引用.NET Standard类库.
我在GitHub上创建了一个MCVE来演示这种行为.我正在使用VS 2017 v15.9.4.
除了总是直接在netframework项目上添加软件包之外,有没有办法让它工作?
(注意:这听起来与此处的问题相似,但我没有使用"点击一次":https://stackoverflow.com/a/47839628/2704659)
解决了我在这里提到的问题后,我得到了以下异常
System.IO.FileNotFoundException:'无法加载文件或程序集'System.Data.SqlClient,Version = 4.1.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a'或其依赖项之一.该系统找不到指定的文件.'
我的库是.NET Standard 1.4,WebApp是.NET Framework 4.6.1
System.Data.SqlClient是版本 - 4.3.0 NuGet包.所以我尝试了以下但是徒劳:
<dependentAssembly>
<assemblyIdentity name="System.Data.SqlClient" culture="neutral" publicKeyToken="31bf3856ad364e35"/>
<bindingRedirect oldVersion="4.1.0.0" newVersion="4.3.0.0"/>
</dependentAssembly>
Run Code Online (Sandbox Code Playgroud) 在下图中可以看到两个项目(Visual Studio 2017 v15.9.6):
-GeneralFunctions 是 .NET 标准 2.0
-TestFramework 是 .NET Framework 4.6.1
我的想法是在 .NET Std 项目中开发一些功能并从 .NET Framework 访问它们。我一直在努力使“System.Data.SqlClient .SqlConnection ”和“System.Data.Odbc .OdbcConnection ”正常工作。在这里回答。
现在我想实现“System.Data.OleDb .OleDbConnection ”,但我找不到它的 NuGet 包。
Dim connection As IDbConnection
connection = New System.Data.SqlClient.SqlConnection("")
connection = New System.Data.Odbc.OdbcConnection("")
connection = New System.Data.OleDb.OleDbConnection("")
Run Code Online (Sandbox Code Playgroud)
OleDB 的错误是:错误 BC30002 类型“System.Data.OleDb.OleDbConnection”未定义。