2016-11-18 5 views
4

Я использую project.json для импорта EntityFramework 6.1.3 NuGet пакет. Я могу подтвердить, что пакет NuGet успешно восстановлен в моем функциональном приложении.Azure Функции с инфраструктурой Entity

Согласно document, я могу напрямую использовать EntityFramework. Тем не менее, я получаю ошибку, как:

ManualTriggerCSharp1: Could not load file or assembly 'EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' or one of its dependencies. The system cannot find the file specified.

кажется, что моя функция не может загрузить EntityFramework DLL правильно. Хотя я скопировал и EntityFramework.dll, и EntityFramework.SqlServer.dll в каталог bin, он по-прежнему жалуется на то же исключение.

Что мне не хватает?

Update

Вот мой project.json файл:

{ 
    "frameworks": { 
    "net46":{ 
     "dependencies": { 
     "Autofac": "4.2.0", 
     "AutoMapper": "5.1.1", 
     "EntityFramework": "6.1.3", 
     "Newtonsoft.Json": "9.0.1" 
     } 
    } 
    } 
} 

Как я уже говорил выше, это не работает. Таким образом, я вручную скопировать оба EntityFramework.dll и EntityFramework.SqlServer.dll в каталог bin и ссылаться на него в run.csx файл как:

#r "EntityFramework.dll" 
#r "EntityFramework.SqlServer.dll" 

Но до сих пор жалуются. Вся линия сообщения журнала является:

2016-11-18T20:22:46.296 Exception while executing function: Functions.ManualTriggerCSharp1. mscorlib: Exception has been thrown by the target of an invocation. ManualTriggerCSharp1: Could not load file or assembly 'EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' or one of its dependencies. The system cannot find the file specified.

Update 2

Вот мой полный код функции:

#r "Tournaments.EntityModels.dll" 

using System; 
using System.Configuration; 

using Tournaments.EntityModels; 

public static void Run(string input, TraceWriter log) 
{ 
    log.Info($"C# manually triggered function called with input: {input}"); 

    var connString = ConfigurationManager.ConnectionStrings["TournamentDbContext"].ConnectionString; 
    var dbContext = new TournamentDbContext(connString); 
    var numberOfPlayers = dbContext.Players.ToList().Count; 

    log.Info($"Number of Players: {numberOfPlayers}"); 
} 

Обратите внимание, что Tournaments.EntityModels.dll является фактической моделью сущностей базы данных. А вот мой project.json:

{ 
    "frameworks": { 
    "net46": { 
     "dependencies": { 
     "EntityFramework": "6.1.3" 
     } 
    } 
    } 
} 

Я был в состоянии собрать функцию. Нет никакой проблемы. Проблема возникла во время выполнения. когда я запустил эту функцию, я получил ошибку:

2016-11-19T00:52:40.818 Function started (Id=c03af3f2-38f5-4df9-9bc5-b5932c365c04)

2016-11-19T00:52:40.818 Function completed (Failure, Id=c03af3f2-38f5-4df9-9bc5-b5932c365c04)

2016-11-19T00:52:40.836 Exception while executing function: Functions.ManualTriggerCSharp3. mscorlib: Exception has been thrown by the target of an invocation. ManualTriggerCSharp3: Could not load file or assembly 'EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' or one of its dependencies. The system cannot find the file specified.

Я смотрел в журналы в KUDU и нашел это из logstream:

2016-11-19T01:00:25.454 Executing: 'Functions.ManualTriggerCSharp3' - Reason: 'This function was programmatically called via the host APIs.'

2016-11-19T01:00:25.649 Function started (Id=b18b45a7-83a8-453e-a337-955e6a4a5117)

2016-11-19T01:00:25.649 Function completed (Failure, Id=b18b45a7-83a8-453e-a337-955e6a4a5117)

2016-11-19T01:00:25.649 A ScriptHost error has occurred

2016-11-19T01:00:25.649 Could not load file or assembly 'EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' or one of its dependencies. The system cannot find the file specified.

2016-11-19T01:00:25.649 Function started (Id=b18b45a7-83a8-453e-a337-955e6a4a5117)

2016-11-19T01:00:25.649 Function completed (Failure, Id=b18b45a7-83a8-453e-a337-955e6a4a5117)

2016-11-19T01:00:25.665 Exception while executing function: Functions.ManualTriggerCSharp3. mscorlib: Exception has been thrown by the target of an invocation. ManualTriggerCSharp3: Could not load file or assembly 'EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' or one of its dependencies. The system cannot find the file specified.

2016-11-19T01:00:25.665 Exception while executing function: Functions.ManualTriggerCSharp3. mscorlib: Exception has been thrown by the target of an invocation. ManualTriggerCSharp3: Could not load file or assembly 'EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' or one of its dependencies. The system cannot find the file specified.

2016-11-19T01:00:25.681 Exception while executing function: Functions.ManualTriggerCSharp3

2016-11-19T01:00:25.696 Could not load file or assembly 'EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' or one of its dependencies. The system cannot find the file specified.

2016-11-19T01:00:25.696 Executed: 'Functions.ManualTriggerCSharp3' (Failed)

2016-11-19T01:00:25.696 Could not load file or assembly 'EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' or one of its dependencies. The system cannot find the file specified.

2016-11-19T01:00:25.696 Function had errors. See Azure WebJobs SDK dashboard for details. Instance ID is 'b18b45a7-83a8-453e-a337-955e6a4a5117'

2016-11-19T01:00:25.696 Could not load file or assembly 'EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' or one of its dependencies. The system cannot find the file specified.

А вот сообщение трассировки стека из журнала функции:

...obs.Script.Description.FunctionInvokerBase.d__23.MoveNext()

--- End of stack trace from previous location where exception was thrown ---

at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)

at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)

at Microsoft.Azure.WebJobs.Host.Executors.FunctionInvoker`1.d__0.MoveNext()

--- End of stack trace from previous location where exception was thrown ---

at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)

at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)

at Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor.d__53.MoveNext()

--- End of stack trace from previous location where exception was thrown ---

at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)

at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)

at Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor.d__3b.MoveNext()

--- End of stack trace from previous location where exception was thrown ---

at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)

at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)

at Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor.d__36.MoveNext()

--- End of stack trace from previous location where exception was thrown ---

at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)

at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)

at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task)

at Microsoft.Azure.WebJobs.Host.Executors.FunctionExecutor.d__1a.MoveNext()

--- End of inner exception stack trace ---

Я думаю, что могу предоставить всю необходимую информацию, которую я могу здесь. Не могли бы вы дать мне совет, пожалуйста?

+0

Не могли бы вы добавить project.json? – Youngjae

+0

У меня нет автоматических ссылок с пакетами 'project.json', работающих (несмотря на документацию). Я просто копирую dll и ссылаюсь на них с помощью '# r'. –

+0

Вы используете последнюю версию исполнения (1.0)? Я просто попробовал себя, и все получилось. Я добавил этот пакет к project.json, и пакет был автоматически восстановлен. Я добавил необходимые инструкции EF (нет #r) и все скомпилированные. – mathewc

ответ

2

Следующие шаги работают для меня в последних версиях функций (1.0). Создать новую функцию (например, ManualTrigger), а также использовать «файлы просмотр» пользовательский интерфейс для добавления нового project.json файла со следующим содержимым:

{ 
    "frameworks": { 
    "net46":{ 
     "dependencies": { 
     "EntityFramework": "6.1.3" 
     } 
    } 
    } 
} 

После сохранения файла вы должны увидеть пакет восстановление происходит в функциях окна входа , например:

2016-11-18T16:50:05.772 Starting NuGet restore 
2016-11-18T16:50:06.991 Restoring packages for D:\home\site\wwwroot\ManualTriggerCSharp2\project.json... 
2016-11-18T16:50:07.553 Committing restore... 
2016-11-18T16:50:07.569 Writing lock file to disk. Path: D:\home\site\wwwroot\ManualTriggerCSharp2\project.lock.json 
2016-11-18T16:50:07.620 D:\home\site\wwwroot\ManualTriggerCSharp2\project.json 
2016-11-18T16:50:07.620 Restore completed in 645ms. 
2016-11-18T16:50:07.631 
2016-11-18T16:50:07.631 NuGet Config files used: 
2016-11-18T16:50:07.631 C:\DWASFiles\Sites\function-fun\AppData\NuGet\NuGet.Config 
2016-11-18T16:50:07.631 
2016-11-18T16:50:07.631 Feeds used: 
2016-11-18T16:50:07.631 https://api.nuget.org/v3/index.json 
2016-11-18T16:50:07.662 
2016-11-18T16:50:07.662 
2016-11-18T16:50:07.709 Packages restored. 

После этого вы можете просто добавить EF с помощью заявления в свой код и он будет успешно скомпилируется:

using System; 
using System.Data.Entity; 
using System.Data.Entity.Infrastructure; 
using System.Data.Entity.Core.Objects; 
using System.Linq; 

public static void Run(string input, TraceWriter log) 
{ 
    log.Info($"C# manually triggered function called with input: {input}"); 
} 
+0

Спасибо, @mathewc. Когда я оставил комментарий по этому вопросу, мне удалось скомпилировать эту функцию. Однако, когда я запускал код, он выдавал исключение. – JustInChronicles

Смежные вопросы