Application dependency not found while release by the build agent - azure-devops

My .NETStandard library works fine locally on Visual Studio. But, when I release the WebApi containing my .NETStandard library the release proces failed on the EF Core Migrations step.
I use the Deploy Entity Framework Core Migrations release task by #bendayconsulting. The error message I receive is n assembly specified in the application dependencies manifest (MySecondMobileApp.ServerData.deps.json) was not found:
package: 'Google.Protobuf', version: '3.5.1'
path: 'lib/netstandard1.0/Google.Protobuf.dll
When I look at the packages folder at my solution there is no Google.Protobuf assembly. The assembly is stored at my global NuGet folder and is part of the MySql.EntityFrameWorkCore NuGet package. The MySql.EntityFramworkCore package is also installed at my user's global NuGet folder. How can I get these packages in the solution's folder? I think that is the answer of my problem.
My deps file looks like this:
{
"runtimeTarget": {
"name": ".NETStandard,Version=v2.0/",
"signature": "19d3dd659b5fa2adabeefcff78ce8381da3d4fe9"
},
"compilationOptions": {},
"targets": {
".NETStandard,Version=v2.0": {},
".NETStandard,Version=v2.0/": {
"ClassLibrary1/1.0.0": {
"dependencies": {
"Google.Protobuf": "3.6.1",
"NETStandard.Library": "2.0.3"
},
"runtime": {
"ClassLibrary1.dll": {}
}
},
"Google.Protobuf/3.6.1": {
"dependencies": {
"NETStandard.Library": "2.0.3"
},
"runtime": {
"lib/netstandard1.0/Google.Protobuf.dll": {
"assemblyVersion": "3.6.1.0",
"fileVersion": "3.6.1.0"
}
}
},
"Microsoft.NETCore.Platforms/1.1.0": {},
"NETStandard.Library/2.0.3": {
"dependencies": {
"Microsoft.NETCore.Platforms": "1.1.0"
}
}
}
},
"libraries": {
"ClassLibrary1/1.0.0": {
"type": "project",
"serviceable": false,
"sha512": ""
},
"Google.Protobuf/3.6.1": {
"type": "package",
"serviceable": true,
"sha512": "sha512-D/h9IZl76jjfM5VlPzG235Zdys9RKXNLYbRGm2fa6Y2UshTqAvYBPIydNOvNTEa24DER/m/zvelHlLO9n1GtNQ==",
"path": "google.protobuf/3.6.1",
"hashPath": "google.protobuf.3.6.1.nupkg.sha512"
},
"Microsoft.NETCore.Platforms/1.1.0": {
"type": "package",
"serviceable": true,
"sha512": "sha512-kz0PEW2lhqygehI/d6XsPCQzD7ff7gUJaVGPVETX611eadGsA3A877GdSlU0LRVMCTH/+P3o2iDTak+S08V2+A==",
"path": "microsoft.netcore.platforms/1.1.0",
"hashPath": "microsoft.netcore.platforms.1.1.0.nupkg.sha512"
},
"NETStandard.Library/2.0.3": {
"type": "package",
"serviceable": true,
"sha512": "sha512-st47PosZSHrjECdjeIzZQbzivYBJFv6P2nv4cj2ypdI204DO+vZ7l5raGMiX4eXMJ53RfOIg+/s4DHVZ54Nu2A==",
"path": "netstandard.library/2.0.3",
"hashPath": "netstandard.library.2.0.3.nupkg.sha512"
}
}
}

Configure a package management feed (Azure Artifacts) and push your internal packages to it, then use a NuGet restore task in your build prior to building to restore the packages from your internal feed.

Finally, I resolved this problem. First, I will apologize from my incomplete question. I had to told stackoverflow my whole problem. My base problem is that I couldn't release my WebAPI containing EntityFrameworkCore for MySql on a Hosted2017 build agent in Azure Devops. The Build Agent also excutes the database migrations.
After some thoughts I relealized that a MySqlConnection not is supported by .NET by default -> you have to install additional client software on the build agent. Unfortunately the Microsoft build agents don't have the capability to establish a MySQLConnection between the build agent and the MySQL database server.
What completely vage is for me at this moment is the fact that the API WebServer on AWS supports this databaseconnection by default. My WebAPI is working perfect on the webserver.
The solution for me to make the build agent work with MySQL was to install an on premise build agent and install MySQL Workbench to install the MYSQL software.
Now the build agent is working fine. The migrations are successfully executed.

Related

Cannot update Azure Devops (VSTS) extension

In the Visual Studio Marketplace (https://marketplace.visualstudio.com) I found an extension (version 1) that I now use in my Azure Devops build pipeline. I contacted the author who made a small improvement and the new version of the extension was pushed yesterday. In the VS MarketPlace I also see that v2 has become available. However, when I go to my build pipeline I can still only select version 1.
I've contacted my organization's admin to ensure that the latest version is installed. We have even tried to remove the extension for the organization (at which point that was reflected in my build definition) and re-install it, but still I can only select version 1.
Any ideas why I cannot access the latest version of the extension?
In my case, the problem was not updating the task version in task.json file. Updating the extension's version (in the manifest file) is not enough. If the task version is not changed, Azure DevOps will not update the task itself (despite correctly updating the extension on the "Extensions" page).
Did the extension bundle multiple versions of tasks? Generally, we include one version of a task in your extension. Now it is also possible to include multiple versions in one extension, it is helpful if you want to roll out future versions of your extension without interrupting service of users running older versions. You can see the multiple version layout. You can only select version 1, that means the extension include only one version task, even you updated the version number in the task schema. In other word, the version you can select is not the version of the task itself, it means in this extension includes how many different version task.
Please see following example extension manifest which includes multiple version task.
{
"manifestVersion": 1,
"id": "build-release-extension-task",
"name": "Build and Release Extension Tools",
"version": "0.1.0",
"publisher": "{your publisher id}",
"targets": [
{
"id": "Microsoft.VisualStudio.Services"
}
],
"description": "Tools for building/releasing with Fabrikam. Includes one build/release task.",
"categories": [
"Azure Pipelines"
],
"icons": {
"default": "images/ic_extension.png"
},
"files": [
{
"path": "buildAndReleaseExtensionTaskV1"
},
{
"path": "buildAndReleaseExtensionTaskV2"
}
],
"contributions": [
{
"id": "custom-build-release-task-v1",
"type": "ms.vss-distributed-task.task",
"targets": [
"ms.vss-distributed-task.tasks"
],
"properties": {
"name": "buildAndReleaseExtensionTaskV1"
}
},
{
"id": "custom-build-release-task-v2",
"type": "ms.vss-distributed-task.task",
"targets": [
"ms.vss-distributed-task.tasks"
],
"properties": {
"name": "buildAndReleaseExtensionTaskV2"
}
}
]
}

"No executable found matching command "dotnet-ef""

I am trying to learn the basics of ASP.NET Core using this tutorial:
I have created a ASP.NET Core web application
I have upgraded it using instruction from here
Now, I am trying to setup the database migration using dotnet ef migrations add Initial from command prompt within project's folder (where project.json is located):
No executable found matching command "dotnet-ef"
I have changed project.json, so that dotnet-ef works:
"tools": {
...
"Microsoft.EntityFrameworkCore.Tools": {
"version": "1.0.0-preview1-final",
"imports": [
"portable-net45+win8+dnxcore50",
"portable-net45+win8"
]
}
Now, the generation fails with the following error:
The specified framework 'Microsoft.NETCore.App', version
'1.0.0-rc2-3002702' was not found.
- Check application dependencies and target a framework version installed at:
C:\Program Files\dotnet\shared\Microsoft.NETCore.App
- The following versions are installed:
1.0.0
1.0.1
1.1.0
- Alternatively, install the framework version '1.0.0-rc2-3002702'
Ok, it makes sense, because Microsoft.EntityFrameworkCore.Tools 1.0.0-preview1-final relies on the old version mentioned in the error, as found in the project.lock.json file.
I don't want to downgrade, so I put the latest version of Microsoft.EntityFrameworkCore.Tools I could find:
"Microsoft.EntityFrameworkCore.Tools": {
"version": "1.1.0-preview4-final",
"imports": [
"portable-net45+win8+dnxcore50",
"portable-net45+win8"
]
},
Doing this will lead to the same error:
No executable found matching command "dotnet-ef"
How can I make it work in version 1.1?
Other context information that might be useful:
OS: Windows 7 x64
VS: 2015 Community Edition
Other parts from project.json:
"frameworks": {
"netcoreapp1.1": {
"imports": [
"portable-net45+win8+dnxcore50",
"portable-net45+win8"
]
}
},
"runtimes": {
"win7-x64": {}
},
UPDATE [30/3/2017]
The new package is
Install-Package Microsoft.EntityFrameworkCore.Tools
ORIGINAL
Try adding
"tools": {
"Microsoft.EntityFrameworkCore.Tools.DotNet": "1.1.0-preview4"
}
Additionally here is a tutorial on setting up .Net Core 1.1.0 with EF Core 1.1.0
https://learn.microsoft.com/en-us/ef/core/get-started/netcore/new-db-sqlite
Grierson's answer is ok, but for future reference I will include the whole process until I made it work:
1) Tools.DotNet already suggested in the accepted answer
"tools": {
"Microsoft.EntityFrameworkCore.Tools.DotNet": "1.1.0-preview4"
}
Ran the same command and received:
Cannot execute this command because Microsoft.EntityFrameworkCore.Design is not installed. Install the version of that package that matches the installed version of Microsoft.EntityFrameworkCore and try again.
2) Added
//EF Core
"Microsoft.EntityFrameworkCore.Tools": {
"version": "1.1.0-preview4-final",
"type": "build"
}
3) Now, the error is:
No parameterless constructor was found on 'ApplicationDbContext'.
Either add a parameterless constructor to 'Application DbContext' or
add an implementation of 'IDbContextFactory' in
the same assembly as 'ApplicationDbC ontext'.
I have chosen to implement the interface. One possible way:
public ApplicationDbContext Create(DbContextFactoryOptions options)
{
var builder = new DbContextOptionsBuilder<ApplicationDbContext>();
builder.UseSqlServer("Server=(localdb)\\mssqllocaldb;Database=Movies;Trusted_Connection=True;MultipleActiveResultSets=true");
return new ApplicationDbContext(builder.Options);
}
The same error occurs when running dotnet ef migrations add Initial
4) I have added a default constructor for ApplicationDbContext class
Now I can add the migration.
EntityFrameworkCore 1.1.0-preview4-final will work only asp.net core 1.1,if you want to move from core 1.0 to core 1.1,look into https://blogs.msdn.microsoft.com/dotnet/2016/11/16/announcing-net-core-1-1/.
I had the same issue.
that's resolved it for me
"tools": {
"Microsoft.EntityFrameworkCore.Tools": "1.1.0-preview4-final",
"Microsoft.EntityFrameworkCore.Tools.DotNet": "1.1.0-preview4-final"
},
You might miss CliToolReference
<ItemGroup>
<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.0.0" />
<DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.0" />
</ItemGroup>
check this

Composer package not found in any version

I am trying to create a custom vendor package but have not yet put the package on packagist. According to the docs, the package can be loaded from git (vcs) instead of packagist: https://getcomposer.org/doc/05-repositories.md#loading-a-package-from-a-vcs-repository
The yii2 project (although don't think framework matters) I have created package inside vendor folder:
foundationize/yii2-foundation
(folder structure is as above, I have quadruple-checked).
My root public_html/composer.json has following entries:
"minimum-stability": "dev",
"require": {
"php": ">=5.4.0",
"yiisoft/yii2": ">=2.0.5",
"yiisoft/yii2-swiftmailer": "*",
"foundationize/yii2-foundation": "dev-master"
},
My package composer file, vendor/foundationize/yii2-foundation/composer.json looks like:
{
"name": "foundationize/yii2-foundation",
"description": "The Foundation extension for the Yii2 framework",
"keywords": ["yii2", "foundation"],
"type": "yii2-extension",
"license": "BSD-3-Clause",
"support": {
"issues": "https://github.com/foundationize/yii2-foundation/issues",
"wiki": "https://github.com/foundationize/yii2-foundation/wiki",
"source": "https://github.com/foundationize/yii2-foundation.git"
},
"authors": [
{
"name": "gvanto",
"email": "gvanto#hotmail.com",
"homepage": "http://foundationize.com"
}
],
"require": {
"yiisoft/yii2": "*"
},
"autoload": {
"psr-4": {
"foundationize\\foundation\\": ""
}
},
"repositories": [
{
"packagist": false,
"type": "vcs",
"url": "https://github.com/foundationize/yii2-foundation.git"
}
]
}
When I run composer install (or update), I keep getting error below:
Your requirements could not be resolved to an installable set of
packages.
Problem 1
- The requested package foundationize/yii2-foundation could not be found in any version, there may be a typo in the package name.
Potential causes:
A typo in the package name
The package is not available in a stable-enough version according to your minimum-stability setting see
https://groups.google.com/d/topic/composer-dev/_g3ASeIFlrc/discussion
for more details.
Read https://getcomposer.org/doc/articles/troubleshooting.md for
further common problems.
I have googled it high and low, read the docs can't seem to get it to work (always the same error, which I actually think would be more useful if it said either the package was not found OR the incorrect package version was found).
You have to add the repositories entry to your root composer.json file. Otherwise, Composer does not know where to search for your package.
Had a similar problem to this and it was because I was running composer in the /web directory in the new Drupal structure. When I ran it in the root all was fine. Annoyingly, you need to run Drush in /web
Since Laravel version 5.5 there is a Package Auto-Discovery feature, so there is no need to add service provider. All you need to register package like this:
composer require barryvdh/laravel-debugbar:dev-master
You can find more info in these articles:
https://medium.com/#taylorotwell/package-auto-discovery-in-laravel-5-5-ea9e3ab20518
https://divinglaravel.com/laravels-package-auto-discovery

microsoft.data.entity missing from MVC 6 (Visual Studio 2015)

I have created a MVC 6 project in Visual Studio 2015.
I am trying to create a Code First Entity framework class library
{
"version": "1.0.0-*",
"description": "DB Class Library",
"authors": [ "Michael" ],
"tags": [ "" ],
"projectUrl": "",
"licenseUrl": "",
"dependencies": {
"System.Collections": "4.0.10-beta-23019",
"System.Linq": "4.0.0-beta-23019",
"System.Threading": "4.0.10-beta-23019",
"System.Runtime": "4.0.10-beta-23019",
"Microsoft.CSharp": "4.0.0-beta-23019",
"System.ComponentModel.Annotations": "4.0.10",
"System.Data.Entity.Repository": "2.0.0.1",
"EntityFramework.SqlServer": "7.0.0-beta5",
"EntityFramework.Commands": "7.0.0-beta5",
"Microsoft.Data.Edm": "5.6.5-beta"
},
"frameworks": {
"dotnet": { }
}
}
This is my project.json file.
The tutorial now says I should add "Microsoft.Data.Entity" However I am missing this reference so I'm not able to add this library. I need this library so I can create my DBContext class.
Had the same problem, the project did not load all the libraries in the beginning. Added the hot fix and all is well now.
Problem :
Opening Package Manager Console produces the message:
"Windows PowerShell updated your execution policy successfully, but the setting is overridden by a policy defined at a more specific scope. Due to the override, your shell will retain its current effective execution policy of Unrestricted. Type "Get-ExecutionPolicy -List" to view your execution policy settings. For more information please see "Get-Help Set-ExecutionPolicy"."
But no PowerShell prompt ever appears. Similarly, attempting to install a package produces the same message on attempting to execute the script file from the package, followed by:
Install failed. Rolling back...
Attempting to upgrade an existing package instead produces:
Failed to initialize the PowerShell host. If your PowerShell execution policy setting is set to AllSigned, open the Package Manager Console to initialize the host first.
Solution
Explained and hot fix links available in https://github.com/NuGet/Home/issues/974#issuecomment-124774650
A hotfix is now available to install and we are confident it will unblock you. Please grab the install from one of these locations appropriately:
3.1.1 for VS 2015:
https://github.com/NuGet/Home/releases/download/3.1.1/NuGet.Tools.vsix
We will publish these to the Visual Studio gallery next week.
Change dotnet to dnx451
"frameworks": {
"dnx451": { }
}

Building Google Analytics package in ASP.NET Core 5.0

I am trying to include Google Analytics API package in my MVC 6 application. I've tried to include all the dependencies or to let it install trough NuGet Package Manager. In either case, when i build the solution, I get an error: Error CS0246 The type or namespace name 'Google' could not be found (are you missing a using directive or an assembly reference?) ProjectName.ASP.NET Core 5.0
Any idea what dependencies I need to include for it to build in ASP.Net Core 5.0?
Here is what i have in my project.json file:
"dependencies": {
...
"Microsoft.Net.Http": "2.2.28.0",
"Microsoft.Bcl": "1.1.9.0",
"Microsoft.Bcl.Build": "1.0.21.0",
"Microsoft.Bcl.Async": "1.0.168.0",
"Google.Apis.Analytics.v3": "1.9.0.1100"
},
...
"frameworks": {
"aspnet50": {
"dependencies": {
}
},
"aspnetcore50": {
"dependencies": {
"Newtonsoft.Json": "6.0.8.0"
}
}
},
Similar issue to the one described here: Problems with RavenDB.Client reference in asp.net 5.0 project.json
Adapting my answer from there:
The problem is that you referencing Google.Apis.Analytics.v3 in the top level dependencies node in project.json. That means that those dependencies are applicable to both Desktop CLR (aspnet50) and CoreCLR (aspnetcore50).
When you build an ASPNET 5 project, all configurations are built, not just the "active" one. Mostly sure Google.Apis.Analytics.v3 works only with the Desktop CLR so move it under a dependencies node under that configuration.
"dependencies": {
....
},
"frameworks": {
"aspnet50": {
"dependencies" : {
"Google.Apis.Analytics.v3": "1.9.0.1100"
}
},
"aspnetcore50": {}
}
Then you might have to either use some conditional blocks in your code (#if ASPNET50) or remove CoreCLR all together.
Then you might have to either use some conditional blocks in your code (#if ASPNET50) or remove CoreCLR all together.