PackageReference management
---------------------------
## Usage
KoreBuild includes tools to help you automatically update your `dependencies.props` files.
#### Generating a dependencies.props file
On an existing project, you can execute the following command:
```
run.ps1 generate deps
```
This will update csproj files and overwrite your build/dependencies.props file with variables.
#### Updating dependencies.props
KoreBuild can help you automatically update the `build/dependencies.props` file in your repo by using a lineup package.
On command line, you can then execute
```
run.ps1 upgrade deps
```
This command requires you set a few properties so the command can download a remote package and use that as the source
of version information. Most aspnetcore repos will set this in `build/repo.props`
```xml
Internal.AspNetCore.Universe.Lineup
2.1.0-*
https://dotnet.myget.org/F/aspnetcore-dev/api/v3/index.json
```
The lineup package itself contains a file that lists all version, and is itself also packaged under `build/dependencies.props`. The `upgrade deps` command will update any matching variables from the lineup package in the local copy of build/dependencies.props.
## Restrictions on PackageReference usage
To manage the complexity of keeping PackageReference versions consistent within a repo and between multiple repos, KoreBuild will enforce the following patterns for using PackageReference.
#### 1. build/dependencies.props
Each repository should have this file, and it should look like this.
```xml
$(MSBuildAllProjects);$(MSBuildThisFileFullPath)
10.0.1
15.3.0
4.7.49
2.3.0
```
### 2. PackageReference's should use variables to set versions
All .csproj files should set the version of a package reference like this:
```xml
```
#### Opt-out of restrictions
To opt-out of these restrictions, projects should add this to the `build/repo.props` file in their repository.
```xml
true
```