Adding DnxWorkspace into my project, Roslyn - c#

I am looking into the .NET MVC projects, and is trying really hard to implement DNX workspace so I can attempt to use DNX workspace instead of MSBuildWorkspace.
I have met the error that
Could not install package 'Microsoft.CodeAnalysis.Workspaces.Dnx 2.4.0'. You are trying to install this package into a project that targets '.NETFramework,Version=v4.6.2', but the package does not contain any assembly references or content files that are compatible with that framework. For more information, contact the package author.
There's no documentation on this error. I tried on all possible versions of .NETframework. I tried downloading and manually adding it as well. (same error)
It seems that this is the only way of changing the analyzer to be able to read MVC projects.
Any help will be appreciated!

For handling Projects with a Project Json you can also use the Package Microsoft.DotNet.ProjectModel.Workspaces which includes the ProjectJsonWorkspace class. You can use it almost the same as MSBuildWorkspace:
var project = new ProjectJsonWorkspace(projectPath);
var projects = project.CurrentSolution.Projects;
I hope this has helped you.

Related

How do i get the NUnit2XmlResultWriter.dll into my project to use it?

I want to write that C# code convert-nunit-3-nunit-2-results-xml-file, but despite the added nuget package i'm missing the dll in my project.
I see it in the tool's directory of the package cache, but missing it in my project.
What do i overlook?
My project is at present for .Net Core 2.1. Is my issue therefore related to this: Add support for net standard ?
I'm new to .net and don't understand all the differences so far.
As zivkan explained, the package is a tool. In fact, it's an extension to another tool, the NUnit engine package. The NUnit engine knows how to find and use the extension.
NUnit does not publish a package that is intended for use by your code as a library, because we would then have to support it as a library in addition to it's use as an extension to NUnit.
However, NUnit's MIT license allows you to use the source code, which you can find at https://github.com/nunit/nunit-v2-result-writer
Since the code has not yet been ported to .NET Core, you would have to do that yourself.
You didn't overlook anything. Not all NuGet packages are libraries.
NuGet has conventions on how files must be packed in order to use various features. For example, files in the content or contentFiles get copied into the project directory, or build output, depending if the project using the package uses packages.config, or PackageReference. If the package author wants to give you a library that you can use in your code, they must put the library in the lib directory in the nupkg (technically it could be in ref, but those don't get copied to build/publish output, they're only used at build time). The tools directory is, unsurprisingly, intended for tools packages. It's often used by unit test runners, or in this case, a report generator.
So, since the package puts the dlls in the tools directory, this means the package author intends the package to be a tool to assist you during development, but not as a library for you to use in your code. You could try contacting the package author to see if they have published another package with the same dll, this time in the lib directory, so that you can use it your project.
Otherwise you'll need to find a solution that doesn't rely on NuGet bringing you this dll as a library. One option is to have a packages.config file that extracts the package in a solution packages directory, and then you use a dll reference to the dll. Your build script would then need to first restore the packages.config file before building your project. Another option is to check in the dll into your source control management tool, if the dll's license allows that, and again have a dll reference to it.

Share code between multiple .NET Core projects

I would like to know how I can share c# source codes between two (or more) .NET Core projects (commandline projects!).
As far as I understand, I can not link to source files in different directories in xproj/project.json based projects. I noticed that it now seems to be recommended to create nuget packages for everything. But is it really necessary for me to setup a private repository and create a nuget package only to be able to share some common source units?
VS2015 contains a template for .NET Core library which may be suitable for building a shared lib. Is it possible to link this lib to a project without a nuget package?
.NET Core Library is an excellent solution for you.
Do it the same way as in standard C# solution - just create the project and reference this project or add a reference to DLL file.
You don't need to use a Nuget, for your own purpose. Nuget packages could be useful to distribute your dll outside.
Clarification:
I miss one point - I'm using VS2015, but I have included Class Library project in my solution, and I'm referencing by project, not by DLL file, and this works fine in ASP.Net Core.
I also have a different project, where referencing DLL file directly working fine, but this is the previous version of ASP.NET app (not Core) - seems NET Core doesn't support this way like as the previous version (yet?).
Sorry for confusing you, sometimes it's too many technologies ;)
So could you just include ClassLibrary project into solution with your project and refer it as a project?
I have achieved this by using source control to branch from my commonly used projects in each new solution, and again merging back to the master branch if I make any changes.
Alternatively, baring in mind that NuGet is only an archived collection of files, you could keep this NuGet package locally, or even create a Template for Visual Studio that has the common libraries by default.
There are a wide range of possibilities that are down to your preference, and current environment state (I.E: Able to setup Source Control, or a package repository).

Error on referencing Exceptionless NuGet package to Xamarin projects

I have a problem on referencing my Exceptionless package. Has anyone ever tried referencing Exceptionless to a Xamarin project? I am having errors when referencing it.
Questions:
What Exceptionless project type do I use? Is it Console and Service Applications?
What package do I reference? Exceptionless or Exceptionless.Portable?
Error Message:
Could not install package 'System.Security.Principal.Windows 4.0.0'. You are trying to install this package into a project that targets 'Xamarin.iOS,Version=v1.0', but the package does not contain any assembly references or content files that are compatible with that framework. For more information, contact the package author.
I have implemented several solutions and none worked for me right now. I tried referencing the package to a portable class library project and the same error occurs. Hope someone has tried this before and can help me with a solution. Thanks.
This was answered by one of the Exceptionless members, Blake Niemyjski. Thanks!
Question Answers:
You'd need to install the Exceptionless package (Console and Service Applications).
Just the latest Exceptionless package.
Referencing Error Solution:
I'm on version 6.1.0 but the way I installed it to was the portable project they generate and I changed the profile to:
Then I was able to reference exceptionless. I know they added support for .net standard but I've yet to get that to work in any of my samples. Can you please try this and let me know.
Full issue link here.

How to handle packages such as EF, MVC4, WebPages and friends in my project repository

I have an asp.net application using EF, MVC4 and some additional packages. Whenever I try to open the project on a different PC I have issues with the installed packages. My references are marked as missing, and the code is far from compilable. Last time I solved it by deleting references and packages and installing the needed packages one by one. I find the solution tedious. Is there any better, global solution for this? How is this supposed to be done? Shouldn't this be automated?
Thanks for the help and pointers!
UPDATE
I DO use NuGet Packages, (otherwise it would be very hard to get all these dlls) but somehow I always end up with uninstalling and reinstalling the packages to make my project work. I always end up with wrong versions and not compiling code.
I end up doing the following:
Delete package.config
Delete dependencies from the web.config file
NuGet Package Manager Console:
PM> Uninstall-Package A.B.C
PM> Install-Package A.B.C
Clean - rebuild project and hope for the best
I think Uninstall - Install can be replaced with Update-Package –reinstall A.B.C
I was hoping that there is a simpler solution for this.
If using visual studio; you can enable automatic package restore; this article outlines nuget in detail.
If you go to Tools -> Options -> NuGetPackage Manager you can make sure that the auto download is enabled. See the screenshot below.
Without knowing which references are broken, I would assume that you can at least use NuGet Packages to manage Entity Framework and additional framework references.
As lucian.jp said nuget it probably the way to go. At my company, we usually will go out of our way to find and use only packages that have maintained nuget packages, and even most of the core Microsoft ones have them, for example https://www.nuget.org/packages/Microsoft.AspNet.Mvc/
For the other ones, keeping a little thirdparty folder with external assemblies/dlls in the root of your repository and then reference from your project to that instead of from some random place on your hard-drive. I.e. check the third party assemblies into your project somewhere that is not your bin directories.
So if you have an existing project, here is what I suggest you do to avoid future issues:
For each of the assemblies, including your MVC ones, find the nuget equivalent, remove the dll from your project and add it back using the nuget package manager.
Get a copy of all the remaining assemblies and create a folder in the root of your repository and place them in there, then delete all of them and add them back in referencing the dlls from that folder.
If you are using git I'd also use .gitignore to not check in your bin directories. Which will force a new deployment of your code to get the assemblies from their respective sources.
Use Nuget for DLL packages like EF and MVC. But do not use Nuget for JS / CSS packages instead go for bower. Nuget packages for CSS and JS libraries are good but just their installation and uninstallation is tricky and may not match your project structure.

Adding a reference to System.Web.Http in a Console application

I am using Visual Studio 2013 and have written a trivial console application in which I wish to use the class HttpError which is present in the assembly System.Web.Http. This assembly comes from NuGet. Installing the assembly does not add it to the project References which I find confusing. I then found others who indicated that the correct assembly comes with the NuGet package "Microsoft ASP.NET Web API 2.2 Core Libraries" so I installed that instead. This package downloads 3 libraries and the required assembly is present but no Reference is added to the project. I can hand edit the csproj and manually add the reference but I am thinking that doing so should not be necessary. What am I doing wrong?
To reproduce:
Create a new C# Console application (latest framework is fine)
Add the above NuGet package
Is there a reference to System.Web.Http? If not then this is my problem.
Thanks for the responses in the comments which indicated that this worked.
I cannot explain it but it was not working yesterday but it is working now. I tested it many times before posting the question.

Categories

Resources