# Annotated dependencies.props
This file is used in CoreFX, CoreCLR, WCF, and BuildTools, located in the repository root. Below is a breakdown of [corefx's master dependencies.props](https://github.com/dotnet/corefx/blob/b57a43bb40fc2099e91d641a8b4f8c76a46afe6a/dependencies.props). It is used for dependency auto-upgrade and dependency verification.
``` xml
450606241ffd24c3c9671cd002955a68e98008a7
450606241ffd24c3c9671cd002955a68e98008a7
0db1f9d8996a6a05960f79712299652a4b04147f
450606241ffd24c3c9671cd002955a68e98008a7
```
Source of truth for dependency tooling: the commit hash of the dotnet/versions master branch as of the last auto-upgrade. These are used with the GitHub raw api to download build-infos.
In `/t:UpdateDependenciesAndSubmitPullRequest`, the task first finds the latest CurrentRef of the dotnet/versions repository, which when used with the raw API will return the latest version of *every* build info. The update proceeds, using that latest build-info data. After updating, the task determines which build-infos were used and updates only the used build-info `*CurrentRef`s in the above part of dependencies.props.
When doing a manual update with `/t:UpdateDependencies`, you need to change these `CurrentRef`s yourself to whatever dotnet/versions commit you want to update to before executing the target.
During dependency verification (`/t:VerifyDependencies` or automatically during `sync`) the targeted build-infos are downloaded and project files are checked for consistency with the build-infos.
``` xml
beta-24601-02
beta-24603-02
beta-24523-00
beta-24603-00
```
These are auto-updated by `UpdateDependenciesAndSubmitPullRequest` and `UpdateDependencies`, with values taken from `Latest.txt`. They are only used to flow this info into MSBuild, *not* by project.json validation (as they were in older types of dependency auto-update).
These properties are verified to match the downloaded build-info during `VerifyDependencies`.
``` xml
1.0.3-prerelease-00826-05
1.0.0-alpha-build0040
```
Similar to the `*ExpectedPrerelease` properties, but these are for specific named packages. They are used in MSBuild targets during builds. These versions in particular aren't auto-updated because they are tools that don't regularly change.
``` xml
build-info/dotnet/
master
$(MSBuildThisFileFullPath)
```
The first two properties assemble the path to the build-info files that CoreFX master depends on.
`CurrentRefXmlPath` is used by the auto-update targets to determine where `dependencies.props` is.
``` xml
$(BaseDotNetBuildInfo)corefx/$(DependencyBranch)
$(CoreFxCurrentRef)
$(BaseDotNetBuildInfo)coreclr/$(DependencyBranch)
$(CoreClrCurrentRef)
$(BaseDotNetBuildInfo)projectk-tfs/$(DependencyBranch)
$(ExternalCurrentRef)
$(BaseDotNetBuildInfo)projectn-tfs/$(DependencyBranch)
$(ProjectNTfsCurrentRef)
https://raw.githubusercontent.com/dotnet/versions
$(MSBuildThisFileFullPath)
CoreFxExpectedPrerelease
CoreFx
$(MSBuildThisFileFullPath)
CoreClrExpectedPrerelease
CoreClr
$(MSBuildThisFileFullPath)
ExternalExpectedPrerelease
External
$(MSBuildThisFileFullPath)
ProjectNTfsExpectedPrerelease
ProjectNTfs
```
Each `RemoteDependencyBuildInfo` indicates a build-info to download, which consists of the `Latest.txt` and `Latest_Packages.txt` at a certain path. `CurrentRef` is flowed from the property into the item metadata rather than hard-coded in the metadata for enhanced visibility in auto-update diffs.
The `XmlUpdateStep`s are rules that match the `*ExpectedPrerelease` properties earlier in this file and link them to the build infos.
``` xml
1.0.1
2.1.0
1.0.0-prerelease-00830-02
$(XunitPerfAnalysisPackageVersion)
%(Identity)
true
microsoft.xunit.runner.uwp
$(AppXRunnerVersion)
```
These are "local" `DependencyBuildInfo`s created to cover packages that aren't in downloaded build-infos because they are external, not published to dotnet/versions, or don't normally change. Specifically, these allow the package versions to be validated in `project.json` files.