During dotnet build, it seems that generated files created during the precompile tasks are not used and the build failed.
precompile cannot be used for files generation? The documention is pretty light about it.
or do I have to deal with a delay to be sure that files are correctly writed on disk ?
Project.json:
{
"name": "Service",
"version": "0.0.1",
"dependencies": {
...
},
"frameworks": {
"netcoreapp1.0": {
"imports": "dnxcore50"
}
},
"scripts": {
"precompile": "%project:Directory%/protogen.bat"
},
"buildOptions": {
"emitEntryPoint": true,
"preserveCompilationContext": true
}
}
Thanks
I assume you don't have this problem anymore, but to save time for anyone running into this issue, here is what is going on:
The problem is a bug in the dotnet tool where source files generated by a precompile command aren't included in the list of files to compile. See #1475 and #3807.
It was fixed by PR#4680. Upgrading to a newer version of .NET Core should fix it.
Related
I'm currently working on a Xamarin.Forms project named ABCD, using macOS Sierra v10.12.6 and Visual Studio (VS) for Mac v7.3.2 (the steps leading up to this problem are detailed here).
Having updated my NETStandard.Library package from version 1.6.0 to 2.0.1*, I notice that the project.json file still says:
"frameworks": {
"netstandard1.5": {}
}
*VS update this package to 2.0.1, despite Terminal showing that dotnet --version is 2.1.3.
I went ahead and replaced netstandard1.5 with netstandard2.0 and rebuilt the project. But was then immediately met with this error:
Error: Your project is not referencing the ".NETPlatform,Version=v5.0" framework. Add a reference to ".NETPlatform,Version=v5.0" in the "frameworks" section of your project.json, and then re-run NuGet restore. (ABCD)
I've tried to fix this in the following ways:
1 – Updating project.json:
"frameworks": {
"netstandard2.0": {},
".NETPlatform,Version=v5.0": {}
}
2 (source) – Updating project.json:
"frameworks": {
"netstandard2.0": {},
".NETPlatform,Version=v5.0": {
"imports": ["netstandard2.0"]
}
3 (source) – Updating project.json:
"frameworks": {
"netstandard2.0": {},
".NETPlatform,Version=v5.0": {
"imports": [".NETCore,Version=v5.0"]
}
4 (source) – Updating project.json:
"frameworks": {
"netstandard2.0": {
"imports": [".NETCore,Version=v5.0"]
}
5 (source) – Updating project.json:
"frameworks": {
".NETPlatform,Version=v5.0": {
"imports": ["netstandard2.0"]
}
6 (source, source) – Updating ABCD.csproj:
<PropertyGroup>
<NuGetTargetMoniker> .NETStandard,Version=v2.0 </NuGetTargetMoniker>
</PropertyGroup>
I thought I might find something helpful here and here but wasn't successful.
The same error from above still remains after having tried the above fixes. How do I fix this?
EDIT:
7 (source) – Updating project.json:
"frameworks": {
"netstandard2.0": {},
"netplatform50": {}
}
Still seeing the same error.
This post suggests not using project.json but instead to do a dotnet migrate in your project root folder to convert it so that it uses .csproj instead
I am developing a library(nupkg) in .net core targeting both net45 and netstandard1.3 and at some point I need to use reflection so my project.json looks like this:
{
"version": "1.1.3",
"dependencies": {
common-dependencies
}
},
"frameworks": {
"net45": {
"frameworkAssemblies": {
"System.Reflection": "4.0.0.0"
},
"dependencies": {
"NLog": "4.3.5",
"Newtonsoft.Json": "6.0.4"
}
},
"netstandard1.3": {
"imports": "dnxcore50",
"dependencies": {
"NETStandard.Library": "1.6.0",
"System.Reflection.TypeExtensions": "4.1.0",
"Newtonsoft.Json": "8.0.2",
"NLog": "4.4.0-*"
}
}
}
}
Most of the times after a mere install-package my-package everything works like a charm, however a couple of times I get this error on installing:
install-package : Failed to add reference. The package 'my-Package' tried to add a framework reference to 'System.Reflection' which was not found in the GAC. This is possibly a bug in the
package. Please contact the package owners for assistance.
I've found a workaround, which is to uninstall-package every other package on the project I want to install my package. This is very odd and undesired behavior I think.
I do have noticed however that on some of those project had different versions of Newtonsoft.Json installed on different projects. This is a warning I also get when installation fails:
Install failed. Rolling back...
Package 'my-package : Newtonsoft.Json [6.0.4, ), NLog [4.3.5, )' does not exist in project 'Target.Project'
I have no idea what could be going on here, and the fact that it happens randomly and the workaround to fix it don't help much.
Any ideas please?
System.Reflection is a reference assembly, but not a runtime assembly. So, you need to use it when building your code, but not reference it from your built assembly.
To do that, specify "type": "build", e.g.:
"frameworkAssemblies": {
"System.Reflection": { "type": "build" }
}
I wrote my open source library, LINQ to Twitter, with shared libraries to minimize deployment artifacts and handle platform specific features. I want to support .NET Core and am thinking that the fastest approach would be to reference the shared libraries. The Add References dialog didn't show the shared libraries, so I tried project.json:
{
"version": "1.0.0-*",
"dependencies": {
"NETStandard.Library": "1.6.0",
"LinqToTwitter.Shared": "*",
"LinqToTwitter.Shared.net": "*"
},
"frameworks": {
"netstandard1.6": {
"imports": "dnxcore50"
}
}
}
I tried a few combinations of versions, but didn't get anywhere. The error messages contain something like this:
The dependency LinqToTwitter.Shared >= * could not be resolved.
Next, I opened the *.xproj and pasted the following Imports into the Project section:
<Import Project="..\LinqToTwitter.Shared\LinqToTwitter.Shared.projitems"
Label="Shared" />
<Import
Project="..\LinqToTwitter.Shared.net\LinqToTwitter.Shared.net.projitems"
Label="Shared" />
This doesn't show references in VS, nothing in metadata, and (as it would follow) can't reference any shared library types from a console app that references the .NET core app.
if library is in the same solution you can reference it using target:project something like
{
"version": "1.0.0-*",
"dependencies": {
"NETStandard.Library": "1.6.0",
"LinqToTwitter.Shared": {"target": "project"},
"LinqToTwitter.Shared.net": {"target": "project"}
},
"frameworks": {
"netstandard1.6": {
"imports": "dnxcore50"
}
}
}
Good news - Visual Studio 2017 now allows .NET Core library projects to reference Shared projects.
I have a ASP.NET 5 website with 3 subprojects. The subprojects have a reference to EF 6.1. Locally everything works fine, but when I try to deploy the website to azure using the assistant, I get the error message
Dependency EntityFramework >= 6.1.3 could not be resolved in
XXX\wrap\PDWeb.Application\project.json 22
The generated project.json of the PDWeb.Application subproject is
{
"version": "1.0.0-*",
"frameworks": {
"net452": {
"wrappedProject": "../../Application/PDWeb.Application/PDWeb.Application.csproj",
"bin": {
"assembly": "../../Application/PDWeb.Application/obj/{configuration}/PDWeb.Application.dll",
"pdb": "../../Application/PDWeb.Application/obj/{configuration}/PDWeb.Application.pdb"
},
"dependencies": {
"PDWeb.Model": "1.0.0-*"
}
},
"net45": {
"wrappedProject": "../../src/Application/PDWeb.Application/PDWeb.Application.csproj",
"bin": {
"assembly": "../../src/Application/PDWeb.Application/obj/{configuration}/PDWeb.Application.dll",
"pdb": "../../src/Application/PDWeb.Application/obj/{configuration}/PDWeb.Application.pdb"
},
"dependencies": {
"PDWeb.Model": "1.0.0-*",
"EntityFramework": "6.1.3",
"PDWeb.Services": "1.0.0-*"
}
}
}
}
The complete build output can be found here
I solved the problem by converting my subprojects to *.xproj...
I had exactly the same issue, when I tried to publish my dnx project.
I run "dnu restore" in every subfolder into the wrap folder and the problem was solved.
In your solution folder is a wrap folder. In this folder are subfolders with project.json files. Open command prompt, go to every subfolder and execute "dnu restore"
I am using VS2015 CTP5 and I am referencing a legacy class library compiled with 4.5.1. During compile, I get this warning:
The primary reference "D:\components.dll" could not be resolved because it was built against the ".NETFramework,Version=v4.5.1" framework. This is a higher version than the currently targeted framework ".NETFramework,Version=v4.5".
Here is my project.json after adding the reference
"frameworks": {
"aspnet50": {
"dependencies": {
"components": "1.0.0-*"
}
}
},
Since the "component" library is build for .net 45 and assuming that you build that library in an older version of visual studio, it will not work in aspnetcore5 but will work on aspnet5 (these are the new version for .net). if you want to get rid of the error and still use your component library, you will need remove the aspnetcore5 json node from the project.json file but the project that you building will not be compatible with aspnetcore5. So your project.json file for the frameworks section should look like this.
"frameworks": {
"aspnet50": {
"frameworkAssemblies": {
"System": "4.0.0.0"
},
"dependencies": {
}
},
"net45": {
"dependencies": { "components": "1.0.0"},
"frameworkAssemblies": { }
}
}
And your reference should look like, I have warning sing next to the component library because I don't have that in my code.
You can look at this question to get more information.
Question 1,
Question 2
Add the library to frameworkDependencies not dependencies
"net45": {
"frameworkAssemblies": {
"components": "1.0.0"
},
"dependencies": {
// NuGet packages go here
}
For me, none of the above worked and after spending a lot of hours investigating... I finally found a solution!
I have to create a new package in the NuGet Package Explorer for my dll, save and export it to a local folder (use the File->Save and File->Export commands). Then declare my local repository(folder) to Visual Studio, go to Tools->Options->NuGet Package Manager->Package Sources and insert a record for my local repository - see image below.