Skip to content

Commit

Permalink
Merge branch 'rc_9' into innoSetup
Browse files Browse the repository at this point in the history
  • Loading branch information
matthid authored Apr 26, 2018
2 parents 76f5103 + 6dbf5fc commit 78743d3
Show file tree
Hide file tree
Showing 82 changed files with 1,729 additions and 417 deletions.
60 changes: 60 additions & 0 deletions Fake.sln
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,14 @@ Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "Fake.Sql.DacPac", "src/app/
EndProject
Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "Fake.Installer.InnoSetup", "src/app/Fake.Installer.InnoSetup/Fake.Installer.InnoSetup.fsproj", "{3C27E2CA-98DC-40ED-B334-87B84D7F3E0D}"
EndProject
Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "Fake.Testing.ReportGenerator", "src/app/Fake.Testing.ReportGenerator/Fake.Testing.ReportGenerator.fsproj", "{4E702236-A2B1-4920-B56D-4746CC0726D3}"
EndProject
Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "Fake.DotNet.Testing.SpecFlow", "src/app/Fake.DotNet.Testing.SpecFlow/Fake.DotNet.Testing.SpecFlow.fsproj", "{DA58D728-C36A-4DC7-8D92-F2BA13667EA5}"
EndProject
Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "Fake.DotNet.Mage", "src/app/Fake.DotNet.Mage/Fake.DotNet.Mage.fsproj", "{D8CFE7F9-8E14-4B22-9729-7FF431AFE36B}"
EndProject
Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "Fake.Tools.Pickles", "src/app/Fake.Tools.Pickles/Fake.Tools.Pickles.fsproj", "{2EC1798B-3AD5-42FE-9406-F358B995ACC3}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|Any CPU = Debug|Any CPU
Expand Down Expand Up @@ -750,6 +758,54 @@ Global
{3C27E2CA-98DC-40ED-B334-87B84D7F3E0D}.Release|x64.Build.0 = Release|x64
{3C27E2CA-98DC-40ED-B334-87B84D7F3E0D}.Release|x86.ActiveCfg = Release|x86
{3C27E2CA-98DC-40ED-B334-87B84D7F3E0D}.Release|x86.Build.0 = Release|x86
{4E702236-A2B1-4920-B56D-4746CC0726D3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4E702236-A2B1-4920-B56D-4746CC0726D3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4E702236-A2B1-4920-B56D-4746CC0726D3}.Debug|x64.ActiveCfg = Debug|Any CPU
{4E702236-A2B1-4920-B56D-4746CC0726D3}.Debug|x64.Build.0 = Debug|Any CPU
{4E702236-A2B1-4920-B56D-4746CC0726D3}.Debug|x86.ActiveCfg = Debug|Any CPU
{4E702236-A2B1-4920-B56D-4746CC0726D3}.Debug|x86.Build.0 = Debug|Any CPU
{4E702236-A2B1-4920-B56D-4746CC0726D3}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4E702236-A2B1-4920-B56D-4746CC0726D3}.Release|Any CPU.Build.0 = Release|Any CPU
{4E702236-A2B1-4920-B56D-4746CC0726D3}.Release|x64.ActiveCfg = Release|Any CPU
{4E702236-A2B1-4920-B56D-4746CC0726D3}.Release|x64.Build.0 = Release|Any CPU
{4E702236-A2B1-4920-B56D-4746CC0726D3}.Release|x86.ActiveCfg = Release|Any CPU
{4E702236-A2B1-4920-B56D-4746CC0726D3}.Release|x86.Build.0 = Release|Any CPU
{DA58D728-C36A-4DC7-8D92-F2BA13667EA5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{DA58D728-C36A-4DC7-8D92-F2BA13667EA5}.Debug|Any CPU.Build.0 = Debug|Any CPU
{DA58D728-C36A-4DC7-8D92-F2BA13667EA5}.Debug|x64.ActiveCfg = Debug|Any CPU
{DA58D728-C36A-4DC7-8D92-F2BA13667EA5}.Debug|x64.Build.0 = Debug|Any CPU
{DA58D728-C36A-4DC7-8D92-F2BA13667EA5}.Debug|x86.ActiveCfg = Debug|Any CPU
{DA58D728-C36A-4DC7-8D92-F2BA13667EA5}.Debug|x86.Build.0 = Debug|Any CPU
{DA58D728-C36A-4DC7-8D92-F2BA13667EA5}.Release|Any CPU.ActiveCfg = Release|Any CPU
{DA58D728-C36A-4DC7-8D92-F2BA13667EA5}.Release|Any CPU.Build.0 = Release|Any CPU
{DA58D728-C36A-4DC7-8D92-F2BA13667EA5}.Release|x64.ActiveCfg = Release|Any CPU
{DA58D728-C36A-4DC7-8D92-F2BA13667EA5}.Release|x64.Build.0 = Release|Any CPU
{DA58D728-C36A-4DC7-8D92-F2BA13667EA5}.Release|x86.ActiveCfg = Release|Any CPU
{DA58D728-C36A-4DC7-8D92-F2BA13667EA5}.Release|x86.Build.0 = Release|Any CPU
{D8CFE7F9-8E14-4B22-9729-7FF431AFE36B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{D8CFE7F9-8E14-4B22-9729-7FF431AFE36B}.Debug|Any CPU.Build.0 = Debug|Any CPU
{D8CFE7F9-8E14-4B22-9729-7FF431AFE36B}.Debug|x64.ActiveCfg = Debug|Any CPU
{D8CFE7F9-8E14-4B22-9729-7FF431AFE36B}.Debug|x64.Build.0 = Debug|Any CPU
{D8CFE7F9-8E14-4B22-9729-7FF431AFE36B}.Debug|x86.ActiveCfg = Debug|Any CPU
{D8CFE7F9-8E14-4B22-9729-7FF431AFE36B}.Debug|x86.Build.0 = Debug|Any CPU
{D8CFE7F9-8E14-4B22-9729-7FF431AFE36B}.Release|Any CPU.ActiveCfg = Release|Any CPU
{D8CFE7F9-8E14-4B22-9729-7FF431AFE36B}.Release|Any CPU.Build.0 = Release|Any CPU
{D8CFE7F9-8E14-4B22-9729-7FF431AFE36B}.Release|x64.ActiveCfg = Release|Any CPU
{D8CFE7F9-8E14-4B22-9729-7FF431AFE36B}.Release|x64.Build.0 = Release|Any CPU
{D8CFE7F9-8E14-4B22-9729-7FF431AFE36B}.Release|x86.ActiveCfg = Release|Any CPU
{D8CFE7F9-8E14-4B22-9729-7FF431AFE36B}.Release|x86.Build.0 = Release|Any CPU
{2EC1798B-3AD5-42FE-9406-F358B995ACC3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{2EC1798B-3AD5-42FE-9406-F358B995ACC3}.Debug|Any CPU.Build.0 = Debug|Any CPU
{2EC1798B-3AD5-42FE-9406-F358B995ACC3}.Debug|x64.ActiveCfg = Debug|Any CPU
{2EC1798B-3AD5-42FE-9406-F358B995ACC3}.Debug|x64.Build.0 = Debug|Any CPU
{2EC1798B-3AD5-42FE-9406-F358B995ACC3}.Debug|x86.ActiveCfg = Debug|Any CPU
{2EC1798B-3AD5-42FE-9406-F358B995ACC3}.Debug|x86.Build.0 = Debug|Any CPU
{2EC1798B-3AD5-42FE-9406-F358B995ACC3}.Release|Any CPU.ActiveCfg = Release|Any CPU
{2EC1798B-3AD5-42FE-9406-F358B995ACC3}.Release|Any CPU.Build.0 = Release|Any CPU
{2EC1798B-3AD5-42FE-9406-F358B995ACC3}.Release|x64.ActiveCfg = Release|Any CPU
{2EC1798B-3AD5-42FE-9406-F358B995ACC3}.Release|x64.Build.0 = Release|Any CPU
{2EC1798B-3AD5-42FE-9406-F358B995ACC3}.Release|x86.ActiveCfg = Release|Any CPU
{2EC1798B-3AD5-42FE-9406-F358B995ACC3}.Release|x86.Build.0 = Release|Any CPU
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
Expand All @@ -767,6 +823,7 @@ Global
{C3C12DCE-7AC4-4E97-A7FC-49189D218885} = {7BFFAE76-DEE9-417A-A79B-6A6644C4553A}
{BB293F2E-C3BD-4F1C-8345-8AEF01998D2C} = {7BFFAE76-DEE9-417A-A79B-6A6644C4553A}
{B2C0063A-FC66-4883-BB69-B1DBE6BF9CA2} = {7BFFAE76-DEE9-417A-A79B-6A6644C4553A}
{D8CFE7F9-8E14-4B22-9729-7FF431AFE36B} = {7BFFAE76-DEE9-417A-A79B-6A6644C4553A}
{64195C50-E138-4218-A7CE-13CD4565B87E} = {7BFFAE76-DEE9-417A-A79B-6A6644C4553A}
{93F1A71E-54E2-4C65-BB1E-1D499890317F} = {7BFFAE76-DEE9-417A-A79B-6A6644C4553A}
{C1B87E1F-8D0D-4A78-9A24-9D5D38B7E9A8} = {7BFFAE76-DEE9-417A-A79B-6A6644C4553A}
Expand Down Expand Up @@ -809,6 +866,9 @@ Global
{DE7579F2-C20F-4C35-BC04-C10362912243} = {901F162F-8925-4390-89C5-9EE2C343F744}
{3BC4A91C-3381-4BF9-BF11-8E06706CF878} = {7BFFAE76-DEE9-417A-A79B-6A6644C4553A}
{3C27E2CA-98DC-40ED-B334-87B84D7F3E0D} = {901F162F-8925-4390-89C5-9EE2C343F744}
{4E702236-A2B1-4920-B56D-4746CC0726D3} = {7BFFAE76-DEE9-417A-A79B-6A6644C4553A}
{DA58D728-C36A-4DC7-8D92-F2BA13667EA5} = {7BFFAE76-DEE9-417A-A79B-6A6644C4553A}
{2EC1798B-3AD5-42FE-9406-F358B995ACC3} = {7BFFAE76-DEE9-417A-A79B-6A6644C4553A}
EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {058A0C5E-2216-4306-8AFB-0AE28320C26A}
Expand Down
11 changes: 11 additions & 0 deletions RELEASE_NOTES.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,16 @@
# Release Notes

## 5.0.0-rc008 - 2018-04-26

* FAKE4: Bundle System.ValueTuple to prevent some issues - https://github.com/fsharp/FAKE/pull/1883
* DOCS: Various improvements - https://github.com/fsharp/FAKE/pull/1883
* FAKE5: New module `Fake.Tools.Pickles` - https://github.com/fsharp/FAKE/pull/1884
* FAKE5: New module `Fake.Tools.Mage` - https://github.com/fsharp/FAKE/pull/1885
* FAKE5: New module `Fake.DotNet.Testing.SpecFlow` - https://github.com/fsharp/FAKE/pull/1886
* FAKE5: New module `Fake.Testing.ReportGenerator` - https://github.com/fsharp/FAKE/pull/1887
* BUGFIX: Some fixes in TeamFoundation integration - https://github.com/fsharp/FAKE/pull/1883


## 5.0.0-rc007 - 2018-04-23

* DOCS: Update documentation issues - https://github.com/fsharp/FAKE/pull/1881
Expand Down
4 changes: 4 additions & 0 deletions build.fsx
Original file line number Diff line number Diff line change
Expand Up @@ -275,6 +275,7 @@ let dotnetAssemblyInfos =
"Fake.Core.Xml", "Core Xml functionality"
"Fake.DotNet.AssemblyInfoFile", "Writing AssemblyInfo files"
"Fake.DotNet.Cli", "Running the dotnet cli"
"Fake.DotNet.Mage", "Manifest Generation and Editing Tool"
"Fake.DotNet.MSBuild", "Running msbuild"
"Fake.DotNet.NuGet", "Running NuGet Client and interacting with NuGet Feeds"
"Fake.DotNet.Paket", "Running Paket and publishing packages"
Expand All @@ -283,6 +284,7 @@ let dotnetAssemblyInfos =
"Fake.DotNet.Testing.NUnit", "Running nunit test runner"
"Fake.DotNet.Testing.XUnit2", "Running xunit test runner"
"Fake.DotNet.Testing.MSTest", "Running mstest test runner"
"Fake.DotNet.Testing.SpecFlow", "BDD with Gherkin and SpecFlow"
"Fake.DotNet.Xamarin", "Running Xamarin builds"
"Fake.JavaScript.Npm", "Running npm commands"
"Fake.JavaScript.Yarn", "Running Yarn commands"
Expand All @@ -292,10 +294,12 @@ let dotnetAssemblyInfos =
"Fake.netcore", "Command line tool"
"Fake.Runtime", "Core runtime features"
"Fake.Tools.Git", "Running git commands"
"Fake.Tools.Pickles", "Convert Gherkin to HTML"
"Fake.Testing.Common", "Common testing data types"
"Fake.Tracing.NAntXml", "NAntXml"
"Fake.Windows.Chocolatey", "Running and packaging with Chocolatey"
"Fake.Testing.SonarQube", "Analyzing your project with SonarQube"
"Fake.Testing.ReportGenerator", "Convert XML coverage output to various formats"
"Fake.DotNet.Testing.OpenCover", "Code coverage with OpenCover"
"Fake.Sql.DacPac", "Sql Server Data Tools DacPac operations"
"Fake.Documentation.DocFx", "Documentation with DocFx"
Expand Down
46 changes: 46 additions & 0 deletions help/markdown/fake-dotnet-testing-specflow.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
# Make BDD with Gherkin and SpecFlow

Use [SpecFlow] to define, manage and automatically execute human-readable acceptance tests in .NET projects. Writing easily understandable tests is a cornerstone of the BDD paradigm and also helps build up a living documentation of your system.

SpecFlow is open source and provided under a BSD license. As part of the Cucumber family, SpecFlow uses the official Gherkin parser and supports the .NET framework, Xamarin and Mono.

The package Fake.DotNet.Testing.SpecFlow is a bridge to the [SpecFlow] CLI (specflow.exe).

## Minimal working example

```fsharp
#r "paket:
nuget Fake.Core.Target
nuget Fake.DotNet.Testing.SpecFlow //"
open Fake.Core
open Fake.DotNet.Testing
let specsProject = "IntegrationTests.csproj"
Target.create "Regenerate Test Classes" (fun _ ->
SpecFlow.run (fun p ->
{ p with ProjectFile = specsProject })
)
Target.create "Create StepDefinition Report" (fun _ ->
SpecFlow.run (fun p ->
{ p with SubCommand = "stepdefinitionreport"
ProjectFile = specsProject
BinFolder = "bin/Debug"
OutputFile = "StepDefinitionReport.html" })
)
Target.create "Default" Target.DoNothing
"Clean"
==> "Regenerate Test Classes"
==> "Build"
==> "Run Integration Tests"
==> "Create StepDefinition Report"
==> "Default"
Target.runOrDefault "Default"
```

[SpecFlow]: http://specflow.org
26 changes: 10 additions & 16 deletions help/markdown/fake-fake5-learn-more.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
> This is especially about the FAKE 5 update, [here you can learn about FAKE](fake-what-is-fake.html)
FAKE 5 is a huge undertaking in modularizing and porting FAKE 4 to dotnet-core.
At the same time we want to use that opportunity to pay old API depths.
At the same time we want to use that opportunity to pay old API debts.

On top of that compatibility was always a major concern when updating FAKE,
therefore we need a clear [migration path](fake-migrate-to-fake-5.html) for existing projects.
Expand All @@ -15,38 +15,32 @@ So before I go into the details of what changed and what the vision is going for
> Therefore I decided to make the finish line of FAKE 5 a community effort.
> If your favorite module is missing, please port it and send a PR (see Open Work section below).
## How stable is it? What is alpha? Should I use it?
## How stable is it? What is RC? Should I use it?

First let me say that there are two distributions of FAKE 5.
First, let me say that there are two distributions of FAKE 5.

* The first one is an update to the 'regular' FAKE 4 package on NuGet.
It's very safe to update to this package as mentioned in the [migrate to fake 5 guide](fake-migrate-to-fake-5.html).
The reason it is considered "beta" is because all "legacy"-APIs have been marked as obsolete, but new APIs have not been stabelized yet.
So just ignore the `Obsolete` warnings and upgrade. If you start fixing the obsolete warnings we MIGHT break your script in an update.
Hope this makes it clear why the Fake-5 nuget package is marked as beta.
Beta stage will end when all `Obsolete` attributes are correct and the new API is considered stable.
Update the package and fix the `Obsolete` warnings to use the new API. There might still be some minor issues in the new API but it is considered stable now (ie no more breaking changes).
* The second one is the new dotnet-core version of FAKE.
This version is brand-new, was migrated to a new platform and has several API changes which are not stabelized yet.
So it's considered an beta.
But please use it: In the beta phase we wan't to learn how we can handle breaking changes in the new modularized system and need actual users we break. Note that Fake 5 uses `paket.lock` for it's modules so you can always go back to a working version and report the issue.
This version is brand-new, was migrated to a new platform and has several API changes.
We call it the "new runner" it bundles the support for the `#r "paket: ..."` references and has a new [CLI](fake-commandline.html). At this point we no longer break the API but there might still be some minor issues.

> Fake 5 and this website are already released with Fake 5, so it might be more stable than you think. It's just that
> Some APIs are still missing and others might be renamed within the beta phase.
> Fake 5 and this website are already released with Fake 5, so it might be more stable than you think.
## Modules? Packages? Paket?

In the past it was cumbersome and hard to extend your own builds with customized logic or share logic across builds easily.
Paket loading scripts helped a lot in that issue space, but now you have quite a lot infrastructor for simply running a build script.
Paket loading scripts helped a lot in that issue space, but now you have quite a lot infrastructure for simply running a build script.
So in a sense it made sense to combine all good parts of paket, dotnet-core and the huge fake library to go to the next level. The result is a standalone, dependency free version of Fake which is modular and extendible. On top of that you can now use all the Fake 5 modules in your "regular" F# projects!

You only need to know the simple [paket.dependencies](http://fsprojects.github.io/Paket/dependencies-file.html) syntax (basically a list of nuget packages) and are able to add custom logic to your script.
You only need to know the simple [paket.dependencies](http://fsprojects.github.io/Paket/dependencies-file.html) syntax (basically a list of nuget packages) and are able to add [custom logic](fake-fake5-custom-modules.html) to your script.
If you are in the scripting area there is not even a need to save `paket.dependencies` as a separate file. Just put it on top of the script. Fake will take care of the rest.

## Open Work / Help wanted

This section describes work that still need to be done to finally release FAKE 5.

* Regulary updated issue with smaller (but blocking) work-items: https://github.com/fsharp/FAKE/issues/1523
* Porting modules (See Modules -> Legacy), please read the migrate modules section in the [contribution guide](contributing.html).
* Missing Obsolete Attributes in the old API (please help when you migrate and notice anything)
* Bootstrapping via Script and System to update scripts automatically + lock FAKE version
Expand All @@ -60,7 +54,7 @@ This section describes work that still need to be done to finally release FAKE 5

The old API suffered from several issues:

* AutoOpen polluted the "Fake" namespace.
* `AutoOpen` polluted the "Fake" namespace.

One problem with this that some modules introduced generic function names which are perfectly valid for other modules as well. Now the second module needs to introduce a "quirk" name.

Expand Down
31 changes: 31 additions & 0 deletions help/markdown/fake-tools-pickles.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
# Convert Gherkin to HTML with Pickles

[Pickles] is a Living Documentation generator: it takes your Specification (written in Gherkin, with Markdown descriptions) and turns them into an always up-to-date documentation of the current state of your software - in a variety of formats.

## Minimal working example

```fsharp
#r "paket:
nuget Fake.Core.Target
nuget Fake.IO.FileSystem
nuget Fake.Tools.Pickles //"
open Fake.Core
open Fake.Core.TargetOperators
open Fake.IO.FileSystemOperators
open Fake.Tools
open System.IO
let currentDirectory = Directory.GetCurrentDirectory()
Target.create "BuildDoc" (fun _ ->
Pickles.convert (fun p ->
{ p with FeatureDirectory = currentDirectory </> "Specs"
OutputDirectory = currentDirectory </> "SpecDocs"
OutputFileFormat = Pickles.DocumentationFormat.DHTML })
)
Target.runOrDefault "BuildDoc"
```

[Pickles]: http://www.picklesdoc.com/
2 changes: 1 addition & 1 deletion help/markdown/legacy-teamcity.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Integrating a FAKE build script into TeamCity

**Note: This documentation is for FAKE.exe before version 5 (or the non-netcore version). The documentation needs te be updated, please help! **
**Note: This documentation is for FAKE before version 5 (or the non-netcore version). The new documentation can be found [here](buildserver.html)**

Easy [TeamCity](http://www.jetbrains.com/teamcity/) integration was one of the major goals for the FAKE build system.

Expand Down
2 changes: 2 additions & 0 deletions help/markdown/legacy-teamcityadvanced.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
# Advanced TeamCity usage

**Note: This documentation is for FAKE before version 5 (or the non-netcore version). The new documentation can be found [here](buildserver.html)**

As can be seen on the [TeamCity](legacy-teamcity.html) page FAKE is really easy to setup in TeamCity,
it also support some advanced scenarios to integrate even deeper with it.

Expand Down
40 changes: 40 additions & 0 deletions help/markdown/testing-reportgenerator.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
# Fake.Testing.ReportGenerator

ReportGenerator converts XML reports generated by OpenCover, PartCover, dotCover, Visual Studio, NCover or Cobertura into human readable reports in various formats.

he reports do not only show the coverage quota, but also include the source code and visualize which lines have been covered.

ReportGenerator supports merging several reports into one. It is also possible to pass one XML file containing several reports to ReportGenerator (e.g. a build log file).

See https://github.com/danielpalme/ReportGenerator

## Minimal working example

```fsharp
"#r "paket:
nuget Fake.Core.Target
nuget Fake.Testing.ReportGenerator"
open Fake.Core
open Fake.Core.TargetOperators
open Fake.Testing
...
Target.create "Generate Reports" (fun _ ->
let parameters p = { p with TargetDir = "c:/reports/" }
!! "**/opencover.xml"
|> ReportGenerator.generateReports parameters
)
Target.create "Default" DoNothing
"Clean"
==> "SetAssemblyInfo"
==> "Build"
==> "RunCoverage"
==> "Generate Reports"
==> "Default"
Target.runOrDefault "Default"
```
5 changes: 2 additions & 3 deletions help/redirects/assemblyinfo.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,5 @@

This page moved to:

- [here for FAKE 5](dotnet-assemblyinfo.html) (Might not be finalized)
- [here for FAKE 4](legacy-assemblyinfo.html) (Final location not decided yet)

- [here for FAKE 5](dotnet-assemblyinfo.html)
- [here for FAKE 4](legacy-assemblyinfo.html)
2 changes: 1 addition & 1 deletion help/redirects/dacpac.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,5 @@

This page moved to:

- [here for FAKE 5](sql-dacpack.html)
- [here for FAKE 5](sql-dacpac.html)
- [here for FAKE 4](legacy-dacpac.html)
Loading

0 comments on commit 78743d3

Please sign in to comment.