SQL installation scripts are created at compile time by the
NServiceBus. NuGet package.
Scripts will be created in the directory format of
For example for a project named
ClassLibrary built in Debug mode the following directories will be created.
bin\ Debug\ NServiceBus. Persistence. Sql\ MsSqlServer
bin\ Debug\ NServiceBus. Persistence. Sql\ MySql
bin\ Debug\ NServiceBus. Persistence. Sql\ Oracle
Scripts will also be included in the list of project output files. This means those files produced will be copied to the output directory of any project that references it.
Scripts creation can configured via
[SqlPersistenceSettings] applied to the target assembly.
project.are not supported. The
project.approach was an experiment by Microsoft at a new project system that was not based on MSBuild. Since
project.did not support running MSBuild files shipped inside a NuGet the SQL Persistence script creation does not work. This experiment has since been abandoned. To fix this either migrate back to the old Visual Studio 2015 project format (
packages.) or migrate to the new Visual Studio 2017 project format. dotnet-migrate can help migrating to the new
[assembly: SqlPersistenceSettings( MsSqlServerScripts = true, MySqlScripts = true, OracleScripts = true, PostgreSqlScripts = true)]
[assembly: SqlPersistenceSettings(MsSqlServerScripts = true)]
[assembly: SqlPersistenceSettings(MySqlScripts = true)]
[assembly: SqlPersistenceSettings(OracleScripts = true)]
[assembly: SqlPersistenceSettings(PostgreSqlScripts = true)]
At compile time the SQL persistence validates that sagas are of the correct base type and match the required conventions. This can be problematic when mixing persistences. For example using the SQL persistence for timeouts but another persister for saga storage. As such it is possible to selectively control what SQL scripts are generated at compile time, and as a side effect avoid the convention validation of sagas.
[assembly: SqlPersistenceSettings( ProduceOutboxScripts = false)]
[assembly: SqlPersistenceSettings( ProduceSagaScripts = false)]
[assembly: SqlPersistenceSettings( ProduceSubscriptionScripts = false)]
[assembly: SqlPersistenceSettings( ProduceTimeoutScripts = false)]
As stated above, scripts are created in the target project output directory. Generally this directory will be excluded from source control. To add created scripts to source control they can be "promoted".
Some token replacement using MSBuild variables is supported.
$(SolutionDir): The directory of the solution.
$(ProjectDir): The directory of the project
All tokens are drive + path and include the trailing backslash
[assembly: SqlPersistenceSettings( ScriptPromotionPath = "$(SolutionDir)PromotedSqlScripts")]
The path calculation is performed relative to the current project directory. So, for example, a value of
PromotedSqlScripts (with no tokens) would evaluate as