我已经设置了一个可重用的基类库,我想将其用于Web,台式机和移动设备。它具有基本功能,例如字符串,日期时间操作等。因为我讨厌写两次代码。
VS2015告诉我最好使用新的“ .NET Standard”平台,所以我做到了,它给了我这个project.json
{
"supports": {},
"dependencies": {
"Microsoft.NETCore.Portable.Compatibility": "1.0.1",
"NETStandard.Library": "1.6.0"
},
"frameworks": {
"netstandard1.5": {}
}
}
使用xunit运行单元测试运行良好。直到我决定在针对net462的WinForms应用中使用它(作为参考)(是的,有些人仍然有需要WinForms的客户端)。该应用程序编译正常,没有任何警告或错误。但是,当我运行该应用程序时,出现此错误:
An exception of type 'System.IO.FileNotFoundException' occurred in DelegateIT.Core.Examples.Wizard.WinFormsClient.exe but was not handled in user code
Additional information: Could not load file or assembly 'System.Runtime, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.
我尝试了不同的选择,但没有成功:
将
"net462": {}
添加到框架部分尝试在
"net462": { "bin": { "assembly": "external\\TheLibraryName.dll", "pdb": "external\\TheLibraryName.pdb" } }
的框架部分中添加“ bin”构建目标-但未输出该平台的自定义DLL。我应该只创建一个新项目,即“ .Net 4.6.2”类库,然后将文件导入为链接吗?尽管我认为整个新系统将消除浪费每个目标框架项目文件的时间:(。
编辑/附录
我在Wpf和WinForms客户端中有以下代码:
foreach (var line in csvLines) {
var splittedLine = line.Split(';');
splittedLines.Add(splittedLine.Select(s => CleanString(s)).ToList());
}
当我省略这样的
CleanString
方法时foreach (var line in csvLines) {
var splittedLine = line.Split(';');
splittedLines.Add(splittedLine.Select(s => /*CleanString(*/s/*)*/).ToList());
}
然后错误消失了,Wpf客户端和WinForms客户端运行正常。似乎是
System.Linq
或至少System.Linq.Expressions
引起了此错误。但是深入研究,我确保也要编辑CleanString
方法,并删除了扩展方法“ RemoveMultipleWhiteSpaces
”。作为参考,这是CleanString方法和参考扩展方法
private string CleanString(string @string) {
return @string
.Trim()
.RemoveMultipleWhitespaces();
}
public static string RemoveMultipleWhitespaces(this string @string) {
if (@string == null) {
return @string;
}
var cleanedString = Regex.Replace(@string, @"(\s)\s+", "$1");
return cleanedString.Trim();
}
因此,总而言之,当我在CleanString中使用以下代码时,它便可以编译并工作。所以我不确定,是否不支持此System.Linq或其他。
private string CleanString(string @string) {
return @string
.Trim()
/*.RemoveMultipleWhitespaces()*/;
}
编辑/添加2:
在project.json中进行了尝试,但是没有用。还尝试添加“ System.Runtime”:“ 4.1.0”作为依赖项,而不是运气。
{
"supports": {},
"dependencies": {
"Microsoft.NETCore.Portable.Compatibility": "1.0.1",
"NETStandard.Library": "1.6.0",
"Newtonsoft.Json": "9.0.1",
"System.Linq": "4.1.0",
"System.Linq.Expressions": "4.1.0",
"System.Text.RegularExpressions": "4.1.0"
},
"frameworks": {
"net462": {},
"netstandard1.5": {}
}
}
最佳答案
我有同样的问题(完全一样)。
我只是在本地nuget包中找到了所需的dll(在本例中为C:\Users\Soren\.nuget\packages\System.Reflection\4.1.0\lib\net462\System.Reflection.dll
),并将其复制到我的项目的输出中,该异常消失了。
但这不是解决方案,而是解决了一段时间的问题。