Azure Functions에서 NuGet 패키지를 어떻게 사용할 수 있나요?


112

Azure Functions를 사용하여 내 C # 함수에서 NuGet 패키지를 참조하고 사용할 수 있나요?


함수 서비스를 다시 시작하기 위해 project.json 파일을 수동으로 업데이트해야했습니다. 그런 다음 내 nuget 패키지를 복원했습니다. 누구든지 패키지를 복원하기 위해 서비스를 다시 시작하는 더 좋은 방법을 알고 있습니까? 쿠두 도움이되지 않았다
에릭 Bergstedt

1
기능 앱 설정에서 표준 사이트 복원 옵션을 사용할 수 있습니다. 그러나 함수가 처음 실행될 때 project.json 파일에 이전에 복원 된 것과 다른 참조 집합이 포함 된 경우 복원 작업이 자동으로 발생합니다.
Fabio Cavalcante

답변:


141

예! Azure Functions 포털은 현재 NuGet 패키지를 추가하고 관리하는 메커니즘을 제공하지 않지만 런타임은 NuGet 참조를 지원하며 함수를 컴파일하고 실행할 때 올바르게 사용되는지 확인합니다.

종속성을 정의 Project.json하려면 필요한 NuGet 패키지 참조 를 사용하여 파일 을 만들어야합니다 . 다음은 Microsoft.ProjectOxford.Face버전 1.1.0에 대한 참조를 추가하는 예입니다 .

{
  "frameworks": {
    "net46":{
      "dependencies": {
        "Microsoft.ProjectOxford.Face": "1.1.0"
      }
    }
   }
}

Azure Functions 포털은 다음을 생성 (또는 업로드)하는 데 사용할 수있는 함수 파일을 관리하는 편리한 방법을 제공합니다 project.json.

  1. 함수의 개발 섹션에서 파일보기를 클릭하십시오.
  2. 파일 생성 옵션을 클릭 합니다 (이전에 생성 된 project.json파일이 컴퓨터에 있는 경우 파일 업로드 옵션을 클릭 할 수도 있습니다.
  3. 파일 이름을 지정하고 project.json패키지 참조를 정의합니다 (위의 예제를 템플릿으로 사용할 수 있음).

패키지 복원 프로세스가 시작되고 로그 창에 다음과 유사한 출력이 표시됩니다.

2016-04-04T19:02:48.745 Restoring packages.
2016-04-04T19:02:48.745 Starting NuGet restore
2016-04-04T19:02:50.183 MSBuild auto-detection: using msbuild version '14.0' from 'D:\Program Files (x86)\MSBuild\14.0\bin'.
2016-04-04T19:02:50.261 Feeds used:
2016-04-04T19:02:50.261 C:\DWASFiles\Sites\facavalfunctest\LocalAppData\NuGet\Cache
2016-04-04T19:02:50.261 https://api.nuget.org/v3/index.json
2016-04-04T19:02:50.261 
2016-04-04T19:02:50.511 Restoring packages for D:\home\site\wwwroot\HttpTriggerCSharp1\Project.json...
2016-04-04T19:02:52.800 Installing Newtonsoft.Json 6.0.8.
2016-04-04T19:02:52.800 Installing Microsoft.ProjectOxford.Face 1.1.0.
2016-04-04T19:02:57.095 All packages are compatible with .NETFramework,Version=v4.6.
2016-04-04T19:02:57.189 
2016-04-04T19:02:57.189 
2016-04-04T19:02:57.455 Packages restored.

예상대로 Azure Functions 런타임은 패키지 어셈블리에 대한 참조를 자동으로 추가하므로을 사용하여 어셈블리 참조를 명시 적으로 추가 할 필요가 없습니다 #r "AssemblyName". 필요한 using문을 함수에 추가 하고 NuGet 패키지에 정의 된 형식을 사용할 수 있습니다. 참조했습니다.

추가 배포 옵션

Azure Functions는 App Services를 기반으로 구축되었으므로 위 단계의 대안으로 표준 Azure Web Apps (Azure 웹 사이트)에 사용할 수있는 모든 훌륭한 배포 옵션에 액세스 할 수 있습니다.

여기 몇 가지 예가 있어요.

App Service Editor (Monaco) 사용

App Service Editor (Monaco)를 사용하여 브라우저에서 직접 파일을 관리하려면 :

  • Azure Functions 포털에서 Function app settings
  • 언더 고급 설정 섹션에서 클릭Go to App Service Settings
  • Tools버튼을 클릭하십시오
  • 에서 개발 , 클릭 앱 서비스 편집기
  • On아직 활성화되지 않은 경우 켜고Go
  • 로드되면 project.json파일을 함수의 폴더 (함수 이름을 따서 명명 한 폴더)로 끌어다 놓습니다 .

SCM (Kudu) 엔드 포인트 사용

  • 로 이동: https://<function_app_name>.scm.azurewebsites.net
  • 디버그 콘솔> CMD를 클릭하십시오.
  • 로 이동 D:\home\site\wwwroot\<function_name>
  • Project.json파일을 폴더 (파일 그리드)로 드래그 앤 드롭합니다.

FTP

지속적인 통합

지속적 통합을 활성화하고 project.json함수 앱이 실행되고 있지 않을 때 파일 과 함께 함수를 배포하는 경우 함수 앱이 초기화되면 패키지 복원이 자동으로 수행됩니다. 소스 제어에 파일을 추가 하지 않는 것이 좋습니다 project.lock.json.

미리 컴파일 된 어셈블리

함수는 미리 컴파일 된 어셈블리로 배포 될 수도 있으며이 경우 모든 종속성 관리는 Visual Studio에서 처리됩니다. 이 옵션은 모든 버전의 Visual Studio에서 또는 Visual Studio 2017 Azure Functions Tools를 사용하여 표준 클래스 라이브러리로 사용할 수 있습니다 .


1
function script root마지막 단락 은 무엇입니까 ? 나는 그것이 어디에 있는지 이해합니다 project.json. 그 맞습니까?
justinyoo

2
@JustInChronicles, 실제로 그보다 한 폴더 위입니다. 는 project.json스크립트 루트의 하위 폴더 함수 폴더에 있습니다. 스크립트 루트 wwwroot는 Azure 의 폴더에 매핑됩니다 .
Fabio Cavalcante

설명해 주셔서 감사합니다!
justinyoo

@FabioCavalcante, 예를 들어 당신이 넣은 너겟 패키지를 사랑하십시오. 하늘빛인지 서비스에 대한 많은 놀라운 것 !!!
토마스

주 위의 유래 답변에서 언급 한 '비주얼 스튜디오 온라인'고하시기 바랍니다 stackoverflow.com/a/36411537/5288052는 '앱 서비스 편집기'와 같은 푸른 도구에서 사용할 수 있습니다 (참조 stackoverflow.com/a/38173438/5288052 )
스테파노 Spinucci

35

이 스레드는 저에게 많은 도움이되었지만 여전히 Project.json을 작동 시키려고 몇 시간을 낭비했습니다.

버전 2.x에서 Azure 함수를 만드는 경우 다른 방식으로이를 수행해야합니다.

명시된대로 새 파일을 생성하고 이름을 function.proj로 지정합니다 . 이 파일에는 Nuget을 통해 라이브러리를 가져 오기위한 XML 구조가 있습니다.

다음은 .Net 용 Amazon S3 SDK를 가져 오는 예입니다.

<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="AWSSDK.S3" Version="3.3.26.3"/>
    <PackageReference Include="AWSSDK.Core" Version="3.3.29.1"/>
  </ItemGroup>

</Project>

이것을 저장하면 패키지가 설치되고 있다는 콘솔 업데이트가 표시됩니다. 이것은 실제로 잘 문서화되어 있지 않으며 이것을 알아내는 데 몇 시간이 걸렸습니다. 그래서 나는 이것이 누군가를 돕기를 바랍니다.


2
게시 해 주셔서 감사합니다. 여기 에 더 많은 정보가있는 링크가 있습니다.

1
너처럼 나도 똑같이하기 위해 몇 시간을 보냈다. 작동합니다. 감사합니다. 사랑 stackoverflow!
karrtojal

13

Azure Functions에서 Nuget 패키지를 사용할 수 있습니다. 가장 쉬운 방법은 Azure Functions 용 템플릿이있는 Visual Studio 2017 15.4를 사용하는 것입니다. 아래 단계를 따르십시오

1) Azure 함수 프로젝트 추가 : 솔루션을 마우스 오른쪽 버튼으로 클릭하고 새 프로젝트 추가를 선택합니다. CLOUD 옵션으로 이동하면 "Azure Function"프로젝트가 있습니다.

Azure 기능

2) 이제 Nuget 패키지를 추가하는 것이 좋습니다. "DEPENDENCIES"를 확장하고 마우스 오른쪽 버튼으로 클릭하여 "Manage Nuget Packages"옵션을 선택합니다. Nuget 패키지 대화 상자가 나타나면 설치할 Nuget 패키지를 선택하십시오. 아래 스크린 샷 참조

3) 이제 Azure 함수를 게시하면 Visual Studio에서 모든 설정 등을 처리합니다.

이 방법은 Visual Studio 2017 15.4 이상을 사용하는 경우에만 작동하며 그렇지 않은 경우 다른 사람이 설명한대로 다른 방법을 따라야합니다.


1
이것은 VS / Class Libraries (Azure Functions 프로젝트에 해당)의 표준 흐름이며 Azure Functions에만 국한되지 않습니다. Azure Functions와 관련된 유일한 단계는 아래에 설명 된 단계입니다. 2.0의 업데이트 된 절차에 대한 세부 정보를 포함하여 원래 답변에 메모를 추가합니다.
Fabio Cavalcante 2017

7

SFTP에 저장된 외부 라이브러리 인 클라이언트 를 사용한다고 가정 해 보겠습니다 NuGet.

이를 위해 최신 Azure Functions 에 따르면 사양에 따라 다음을 수행합니다.

  1. 당신의 내부 파일 열기 섹션 푸른 기능 과라는 새 파일을 추가합니다 function.proj.

    여기에 이미지 설명 입력 자세한 정보는 Microsoft 문서를 참조하십시오 .


  1. 그 안에 구조를 사용하여 패키지 참조를 function.proj넣습니다 ( Visual Studio로 로컬 프로젝트를 만드는 경우 파일 내부에서 찾을 수있는 동일한 종류의 구조).NugetXML*.csprojNuGet 패키지를 설치 ).

    여기에 이미지 설명 입력


  1. 다음으로 프로젝트에 대한 라이브러리 참조를 포함 해 보겠습니다. 여기에 이미지 설명 입력

    여기서 필수적인 것은 다음과 같은 예에서 볼 수있는 것처럼 라이브러리에 대한 전체 경로를 제공해야한다는 것입니다. "D:\home\site\wwwroot\bin\your_custom_library.dll"


  1. 다음으로 라이브러리 별 코드를 테스트합니다. 여기에 이미지 설명 입력

  1. 마지막으로 로그 섹션을 열고 코드를 저장합니다. 잠시 후 NuGet패키지 복원 로그를 볼 수 있습니다 . 여기에 이미지 설명 입력

    참고 : 이러한 로그는 저장할 때도 나타날 수 있습니다. function.proj 파일을 하거나 프로젝트를 실행할 .


라이브러리가 여전히 알 수없는 것으로 표시 되는 경우 Visual StudioAzure Cloud 탐색기Dll사용하여 bin 폴더에 수동으로 추가해보십시오 .

여기에 이미지 설명 입력


이 답변 이후 변경된 사항이 있습니까? 이것은 더 이상 작동하지 않는 것 같습니다. 'Compilation service error'- 'Functions.TimerTrigger2'실행 됨 (실패, Id = a318d5b7-a02c-4ba0-bb04-037beda89b1c) 'D : \ home \ site \ wwwroot \ bin \ Google.Apis'파일을 찾을 수 없습니다. .Sheets.v4.dll '.
사용자

를 통해 스크립트를 설치하는 경우 일정 시간이 지나면 function.proj해당 위치 dll가 로그 섹션에 나타납니다. 경우에 따라 Azure 함수에 대한 페이지를 다시 한 번 다시로드해야 할 때가 있습니다. 때때로 "실행"단추를 눌러 NuGet 패키지 설치 및 위치를 확인합니다. 로그 섹션에서 인쇄중인 항목을 위치로 확인하고 넣어보십시오.
Arsen Khachaturyan 19 년

2

Visual Studio 2017의 새로운 .csproj 형식도 지원됩니다. 프로젝트를 ASPNET 웹 프로젝트로 만드는 경우 Azure Functions 런타임은 프로젝트를 빌드하기 전에 필요한 모든 너겟 패키지를 다운로드합니다.


ASP.NET 웹 프로젝트의 경우 VS 2015도 작동합니다. Azure Functions 도구의 경우 VS 2017에만 해당됩니다. 주요 차이점은 미리 컴파일 된 비트 (및 종속성)를 배포하므로 런타임이 복원을 대신 처리하지 않는다는 것입니다.하지만 그렇습니다. 이것은 실제로 함수를 작성하고 종속성을 관리하는 새로운 방법입니다. 최신 기능을 반영하도록 답변을 업데이트하겠습니다.
Fabio Cavalcante
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.