2017-03-12 1 views
6

나는 .NET Core projects입니다. Mac과 Linux에서 최신 Mono 및 .NET Core 1.0.1 툴 (MSBuild 기반 csproj 툴링)을 사용하여 Travis CI를 사용하여 빌드하려고합니다. 타겟은 netstandard1.6.1, net45net461입니다. 내가 Travis CI에서 얻을 오류 :Building VS 2017 MSBuild csproj Linux에서 Mono를 사용하는 프로젝트

/usr/share/dotnet/sdk/1.0.1/Microsoft.Common.CurrentVersion.targets(1111,5) : 오류 MSB3644 : 프레임 워크 에 대한 참조 어셈블리 ".NETFramework, Version = v4.5"를 찾을 수 없습니다. 이 문제를 해결하려면 SDK 또는 타겟팅 팩을이 프레임 워크 버전으로 설치하거나 응용 프로그램을 SDK 또는 타겟팅 팩이 설치된 프레임 워크 버전으로 조정하십시오. 어셈블리는 GAC (Global Assembly Cache)에서 으로 해결되며 참조 어셈블리 대신 사용됩니다. 따라서 어셈블리가 의도 한 프레임 워크를 대상으로 정확하게 이 아닐 수도 있습니다.

모노는 VS 2017 MSBuild 기반 csproj 프로젝트를 지원하지 않습니까? 프로젝트를 만들려면 어떻게해야합니까? 두 가지 옵션은 내가 알고 있어요까지로, 여기가

+0

, 당신은 윈도우 (AppVeyor)를 사용한다 : 여기에 최신 beta release

내 .travis.yml 파일에 대한 링크처럼 보인다. Linux의 .NET Core Tooling은 .NET Core 프로파일에 대해 컴파일 할 수 있어야합니다. Mono는 필요하지 않으며 .NET Framework (알림)가 아닙니다. –

+0

@LexLi : 프로젝트의 .NET 코어 빌드 (적어도)가 Linux에서 작동하는지 테스트하려고 할 때 정말 안좋은 해결책입니다. 나는 지금이 문제에 정확히 직면하고있다. 나는 대답을 추가 할 수 있기를 바라고있다. –

+0

@JonSkeet 확실히 Windows 및 .NET Framework에서만 실행되도록 테스트 케이스를 제한하는 나쁜 솔루션입니다. 그러나 Mono는이 경우 .NET Framework를 대신 할 자격이 없습니다. 테스트 케이스에 이상한 점을 추가 할 수 있고 오픈 소스 프로젝트에서 자주 직면합니다. –

답변

4

있습니다

  • 를 사용하여 그들에게 가리 키도록 this issue에 설명 된대로 FrameworkPathOverride 환경 변수.

  • .NET 코어에 대해서만 빌드하도록 트래비스 빌드를 제한하십시오. 이것은 내 경험에서 훨씬 더 간단합니다. 에

    language: csharp 
    mono: none 
    dotnet: 1.0.1 
    dist: trusty 
    
    script: 
        - dotnet restore src/NodaTime 
        - dotnet restore src/NodaTime.Test 
        - dotnet restore src/NodaTime.Serialization.Test 
        - dotnet build src/NodaTime -f netstandard1.3 
        - dotnet build src/NodaTime.Test -f netcoreapp1.0 
        - dotnet build src/NodaTime.Serialization.Test -f netcoreapp1.0 
        - dotnet run -p src/NodaTime.Test/*.csproj -f netcoreapp1.0 -- --where=cat!=Slow 
        - dotnet run -p src/NodaTime.Serialization.Test/*.csproj -f netcoreapp1.0 
    

    몇 가지 참고 사항 ... 그것은 적어도 말을 예비, 그러나 그것은 구축 않습니다 -

는 여기에 내가 마이그레이션 할 때 내가 Noda Time에 사용됩니다 노다 시간 .travis.yml 파일입니다 이 :

  • 이전의 SDK는 달리, 우리는 이제 별도로 각 프로젝트를 복원해야 - 더 큰 "DOTNET이 최상위 수준에 복원하지":(
  • 이것이 dist: xenial에서 실행되지 않을 때 나는 놀랐다. (그것은 환경이 .NET Core를 지원하지 않는다고 주장한다.) 내 추측에 의하면 이것은 바뀔 것이다.
  • 우리는 NUnit과를 사용하고, 그리고 순간에 새로운 SDK에서 테스트의 유일한 방법은 테스트를 실행, 따라서 dotnet run을 NUnitLite을 사용하는 것입니다
  • 난 그냥 디렉토리를 지정할 수 없습니다 약간 놀랐어요dotnet run (예 : dotnet restoredotnet build)의 이름이지만 사물의 방식 인 것 같습니다. 내가 버그 리포트를 사냥거야 ... 어느 경우

, 내가 빌드 및 Windows에서 작동하는 모든 것을 확인하는 Windows 기반 CI 빌드를 가지고도을 을 권하고 싶습니다 (이상적으로 각각의 프레임 워크를 테스트 지원하다).

+0

나는 Nodatime에도 Cake를 사용하고 있는데, Microsoft가 Mono에 대한 지원을받을 때까지 두 번째 옵션으로 해결할 것입니다 (이에 대한 GitHub 문제가 있습니다). –

+1

@MuhammadRehanSaeed : 나는 Cake를 들여다 보겠다는 의미를 지키지 만, 지금 당장은 내가 필요로하는 것 이상의 변경없이 모든 것을 얻고 싶습니다. 내 마지막 차단기는 docfx입니다 : ( –

+0

이 답변은 구식 일 수 있습니다, 다른 답변을 참조하십시오.) 아직 작동하지 않습니다. –

0

@dasMulli는 어제 (5 월 5 일) Mono가 .NET Core!에서 작동하는 Mono 5.0 Beta 2 (5.0.0.94)를 릴리스했다고 지적했습니다. 여기에 his post on dotnet/sdk#335입니다.당신은 .NET 프레임 워크 프로파일을 대상으로하는 경우

sudo: required 
dist: trusty 
language: csharp 
solution: MySolution.sln 
mono: 
    - beta 
dotnet: 1.0.3 

install: 
    - nuget restore MySolution.sln 
    - dotnet restore MySolution.sln 

script: 
    - msbuild /t:Rebuild MySolution.sln 
+0

내 travis.yml이 현재 버전 5.2.0 인 모노'latest'를 설치하고 있습니다. 내 빌드는 여전히 netstandard 및 net45 https : // travis를 대상으로하는 .NET 핵심 프로젝트를 빌드 할 수 없습니다 -ci.org/RehanSaeed/Serilog.Exceptions/jobs/266445606 –

관련 문제