Improve edit-run cycle time on .Net Core - f#

I'm trying to improve the performance in Logary and am bumping into an unexpected issue with .Net Core; even a single-character change in Logary.PerfTests
causes a complete restore throughout all of the repository (I think), with this as a result:
Can I somehow improve the change-run performance? I've tried the core-only sln file, but dotnet core/rider seems to restore all nugets for all projects no matter.
Here's paket.dependencies for the group:
group Benchmarks
source https://api.nuget.org/v3/index.json
framework net471, netcoreapp2.0
redirects on
nuget FParsec
nuget FSharp.Core
nuget Hopac
nuget NodaTime
nuget Expecto
nuget Expecto.BenchmarkDotNet
Here's the PR/code in full https://github.com/logary/logary/pull/323

Related

Cannot create Q# projects

I'm new to quantum computing and I've been trying to follow instructions on https://learn.microsoft.com/en-us/azure/quantum/install-command-line-qdk?tabs=tabid-vscode to dive into this field, but I've run into a problem. Every time I'm trying to create a new Q# application project, I get the following error message
The project file cannot be opened. Unable to find package Microsoft.Quantum.Sdk. No packages exist with this id in source(s): Microsoft Visual Studio Offline Packages C:\Program Files\dotnet\sdk\5.0.202\Sdks\Microsoft.Quantum.Sdk\Sdk not found. Check that a recent enough .NET SDK is installed and/or increase the version specified in global.json.
and I can't find that package myself either.
I've tried to install Microsoft.Quantum.Development.Kit-0.16.2104.138035 several times, with both .NET 3.1.408 and 5.0.202. I'm using VS 2019 16.9.4 Community Edition on Windows 10.
Looks like nuget.org is not listed as a valid package source in your computer, so dotnet can't find the QDK packages online.
Try running this command:
dotnet nuget add source https://api.nuget.org/v3/index.json -n nuget.org
And then try building your Q# project again.
It's unclear to me why nuget.org is not listed as a source, though; it should be included by default when you install the .NET Core.

How to configure older version of package with packages available on TFS server

I have a VS 2008 file that runs on my computer perfectly fine and does everything it needs to do. When I update the TFS version of it its copies exactly, just as you'd expect. However when I build my solution on TFS it can't find a package in my packages folder in my project folder.
This all makes sense, the .gitignore has it set so that packages in the project are removed (unless necessary), and my company uses nuget to deal with all common 3rd party packages used. That being said, how do I get a reference to the package (with appropriate version) from the TFS server to my code on TFS?
P.S. This is my first time dealing with this tech so apologies if the lingo is being misused. Thanks!
How to configure older version of package with packages available on TFS server
If you are using the TFS version is 2015 or above, there is NuGet Installer or NuGet Restore task, which you could use to restore the nuget package from the package source to the work directory when you build your project:
Check the document Azure Artifacts and NuGet restore Vs NuGet installer.
If you are using the TFS version is 2013 and below, you can
check the document Integrate NuGet Package Restore TFS Build 2013 or Older to restore nuget packages.
Hope this helps.

Crystal Reports in Visual Studio 2017

I have a MVC .Net application that uses a Crystal Report to return a PDF file. It was working ok, but I wanted to install the most recent version of the runtime on the server to see if it would correct an issue with fonts that I was experiencing.
The server is Windows Server 2008 R2, and I installed the most recent version of CR for VS from the SAP website. This installed two things on the server: SAP Crystal Reports runtime engine for .NET Framework (64-bit) 13.0.21.2533, and SAP Crystal Reports, version for Visual Studio 13.0.21.2533.
My Visual Studio project has the following Nuget packages installed: CrystalDecisions.CrystalReports.Engine, CrystalDecisions.Shared, CrystalDecisions.ReportSource, CrystalDecisions.Web.
Now when I try to access this page and generate the PDF, I get the following server error:
Could not load file or assembly 'CrystalDecisions.ReportAppServer.CommLayer, Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304' or one of its dependencies. The system cannot find the file specified.
I'm not finding any coherent info online as to why this error is appearing or how to resolve it aside from copying DLLs to the bin folder. I tried adding a couple of Nuget packages relating to CrystalDecisions.ReportAppServer. There is not a Copy Local option for the DLL reference, so I tried to manually copy the DLL from the Nuget packages folder for the project and paste them into the bin folder, but that didn't lead anywhere except more errors that I couldn't resolve.
The documentation on this stuff is horrible and confusing, when it seems like it should be pretty straightforward, as I said this was already working before I upgraded the runtime and CR for VS.
Are the Nuget packages maybe not compatible with this newer version? On this SAP blog post, it mentions "As most of CR/RAS .NET Assemblies are now re-versioned from 13.0.2000.0 to 13.0.3500.0, user MUST remove all old CR assemblies from Reference list and add the new version of CR assemblies, then rebuild the application.", but I do not know where to get these assemblies aside from using the Nuget packages.
Please download all the packages of crystal reports 13.0.21. You have to download all packages are given below.
CrystalDecisions-CrystalReports-Engine
CrystalDecisions-ReportSource
CrystalDecisions-Shared
CrystalDecisions-Web
CrystalDecisions-ReportAppServer

NuGet adds Packages folder to the solution. Should it be part of Source control?

I am using NuGet to add packages to my solution. NuGet added a Packages folder to my visual studio’s solution root folder. The concerning part is that the “packages” folder is not part of source control. That means the source code comes from TFS, but the project references come from a folder that is fed by external source. People can put malicious code in the packages folder and build the application.
I like to understand how my other colleagues that get the source code from the TFS source control can build the project with packages folder not being part of the source control?
We did have a similar problem where our build server wasn't allowed to have internet connection, so couldn't download packages. We started with creating our own NuGet Source, which was simply a shared folder with all packages copied to it. The visual studio projects would of course use these packages rather than packages hosted on www.nuget.org
I must say that we scrapped this idea because of the overhead of doing it as our package usage increased.
My advise is that if you are worried about packages downloaded at build time, store the packages folder on source control.
NuGet supports automatic package restoration so your colleagues who use this feature will automatically download required packages. There is a policy at nuget.org that prevents user to delete or update exact version of package once it is published so it can support package restore without any interruptions - see this answer for more detail. If you are using other package sources than nuget.org than you should check their package deletion/update policy because it may be different.

Nuget Package: Use Different MVC Version When Available

I've got an open source nuget package AttributeRouting. Currently the packaged assemblies reference System.Web.Mvc version 2. I'd like to reference MVC 3/4 in MVC 3/4 projects, so that users of Windows 8/VS 2011 don't have to install MVC 2 to use the package. Anyone know of a way to do this? Google has not been my friend.
Current, Nuget can't do this. This is why there are separate MVC2 and MVC3 packages of libraries in the Nuget gallery.
So you have to create a separate Nuget package for MVC3 and MVC4 (if necessary)
You can add into your Nuget package the assemblies for all supported versions of MVC and then use install.ps1 script to remove unnecessary ones and leave only the assembly which is compatible with MVC version used in the target project.
You will find more detailed instructions and an example of install.ps1 script here:
http://blogs.korzh.com/2013/12/nuget-package-different-mvc-versions.html

Resources