2016-08-24 9 views
2

웹, 데스크톱 및 모바일에 모두 사용하려는 재사용 가능한 기본 클래스 라이브러리를 설치했습니다. 기본 기능을 보유하고 있습니다 (예 : 문자열, datetime 조작 등. 왜냐하면 내가 두 번 코드를 작성 싫어. 잘 갔다netstandard1.x 및 winforms/wpf/windows - 파일 또는 어셈블리를로드 할 수 없습니다. System.Runtime, 버전 = 4.1.0.0

VS2015은 새로운 ".NET 표준"플랫폼을 사용하는 것이 가장 하더군요, 그래서 그렇게했고, 그것은 나에게 xUnit의과 단위 테스트 실행이 project.json

{ 
    "supports": {}, 
    "dependencies": { 
    "Microsoft.NETCore.Portable.Compatibility": "1.0.1", 
    "NETStandard.Library": "1.6.0" 
    }, 
    "frameworks": { 
    "netstandard1.5": {} 
    } 
} 

했다. 내가 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" } }이 있지만 플랫폼 용 사용자 지정 DLL은 출력되지 않았습니다.

".Net 4.6.2"클래스 라이브러리를 새로 만들어서 파일을 링크로 가져와야합니까? .

:이 새로운 시스템은 :(멀리 대상 프레임 워크 당 프로젝트 파일의 시간의 낭비를 취할 것이라고 생각하지만


EDIT/칙 나는 WPF & 윈폼 클라이언트에서이 코드를했다

foreach (var line in csvLines) { 
    var splittedLine = line.Split(';'); 
    splittedLines.Add(splittedLine.Select(s => CleanString(s)).ToList()); 
} 

나는 다음이

foreach (var line in csvLines) { 
    var splittedLine = line.Split(';'); 
    splittedLines.Add(splittedLine.Select(s => /*CleanString(*/s/*)*/).ToList()); 
} 

처럼 CleanString 방법을 떠날 때 오류가 사라졌으며 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 또는 sth가 지원되지 않는다.?

private string CleanString(string @string) { 
      return @string 
       .Trim() 
       /*.RemoveMultipleWhitespaces()*/; 
     } 


편집/ADDENDEUM2 :

가 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": {} 
    } 
} 

답변

1

나는 똑같은 문제가 있습니다.
로컬 Nuget 패키지 (이 경우 C:\Users\Soren\.nuget\packages\System.Reflection\4.1.0\lib\net462\System.Reflection.dll)에서 필요한 dll을 찾았으며 프로젝트의 출력에 복사되고 예외가 사라집니다.
그러나 이것은 해결책이 아니며 잠시 동안 문제를 해결했습니다.

1

.NET 표준 라이브러리의 종속성을 수동으로 복사 할 필요가 없습니다.

마이크로 소프트는 마침내 NuGet 버전 4.0.1에서 VS2017이 출시 된 후 NuGet 4에 대한 첫 번째 업데이트 인 will fix을 문제로 인정했습니다.

더 깨끗한 해결 방법은 기존 프로젝트에 <RestoreProjectStyle>PackageReference</RestoreProjectStyle>을 추가하는 것입니다. 그러나 according to Rob Relyea MS는 RTM 이후에이 속성을 무시하므로 다른 해결 방법은 <PackageReference Update="PlaceholderToConvinceThisProjectToGetTransitivePackageReferenceFromProjectReferences"/>입니다.

또 다른 해결 방법은 that answer과 같은 NuGet 패키지에 .NET Standard 라이브러리를 압축하는 것이지만 가장 쉬운 방법은 아닙니다.