我已经设置了一个可重用的基类库,我想将其用于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),并将其复制到我的项目的输出中,该异常消失了。
但这不是解决方案,而是解决了一段时间的问题。

10-01 01:44
查看更多