WARNING: Theses rules are not compatible with sandboxing.
This is a minimal viable set of C# bindings for building csharp code with mono. It's still pretty rough but it works as a proof of concept that could grow into something more. If windows support ever happens for Bazel then this might become especially valuable.
Add the following to your WORKSPACE
file to add the external repositories:
git_repository(
name = "io_bazel_rules_dotnet",
remote = "https://github.com/bazelbuild/rules_dotnet.git",
tag = "0.0.1",
)
load(
"@io_bazel_rules_dotnet//dotnet:csharp.bzl",
"csharp_repositories",
"nuget_package",
)
csharp_repositories(use_local_mono = True)
nuget_package(
name = "some_name",
package = "Some.Package",
version = "0.1.2",
)
The csharp_repositories
rule fetches external dependencies, namely the NUnit
binaries and the mono repository. Setting use_local_mono
to True
will use
your installed mono framework instead of downloading one. If you are on OS X
you can set use_local_mono
to False
and mono will be downloaded for you by
bazel. Support for downloading mono on Linux is coming soon.
csharp_library(
name = "MyLib",
srcs = ["MyLib.cs"],
deps = ["//my/dependency:SomeLib"],
)
csharp_binary(
name = "MyApp",
main = "MyApp", # optional name of the main class.
srcs = ["MyApp.cs"],
deps = ["//my/dependency:MyLib"],
)
csharp_nunit_test(
name = "MyApp",
srcs = ["MyApp.cs"],
deps = ["//my/dependency:MyLib"],
)
In the WORKSPACE file for your project record a nuget dependency like so. This is a repository rule so it will not work unless it is in a workspace file.
nuget_package(
name="ndesk_options", # referenced via path @ndesk_options//:ndesk_options
package="NDesk.Options",
version="0.2.1",
)
Add a collection of dotnet assembly dll's to be used as a dependency.
dll_import(
name="some_lib",
srcs=[
"Some.dll"
"Some.Other.dll",
]
)
- Handle .resx files correctly.
- .Net Modules
- Conditionally building documentation.
- Pulling Mono in through a mono.WORKSPACE file.
- Still need to implement this for linux.
- Multiple target framework support for nuget packages.
- nuget_packages repository rule that will handle multiple different nuget packages in one rule.
- Building csproj and sln files for VS and MonoDevelop.
- Windows .NET framwork support
csharp_library(name, srcs, deps, warn=4, csc)
Builds a C# .NET library and its corresponding documentation.
Attributes | |
---|---|
name |
Unique name for this rule |
srcs |
Csharp .cs or .resx files. |
deps |
Dependencies for this rule. |
warn |
Compiler warn level for this library. (Defaults to 4.) |
csc |
Override the default csharp compiler. Note: This attribute may removed in future versions. |
csharp_binary(name, srcs, deps, main_class, warn=4, csc)
Builds a C# .NET binary.
Attributes | |
---|---|
name |
Unique name for this rule |
srcs |
Csharp .cs or .resx files. |
deps |
Dependencies for this rule. |
main_class |
Name of class with |
warn |
Compiler warn level for this binary. (Defaults to 4.) |
csc |
Override the default csharp compiler. Note: This attribute may removed in future versions. |
csharp_nunit_test(name, srcs, deps, warn=4, csc)
Builds a C# .NET test binary that uses the NUnit unit testing framework.
Attributes | |
---|---|
name |
Unique name for this rule |
srcs |
Csharp .cs or .resx files. |
deps |
Dependencies for this rule. |
warn |
Compiler warn level for this test. (Defaults to 4.) |
csc |
Override the default csharp compiler. Note: This attribute may removed in future versions. |
nuget_package(name, package, version, package_sources)
A repository_rule that adds a nuget package dependency for the Workspace.
Attributes | |
---|---|
name |
Unique name for this rule |
package |
Name of the nuget package. |
version |
Version of the nuget package to install. |
package\_sources |
Sources to pull nuget packages from. Either url or path. |
dll_import(name, srcs)
A repository_rule that adds a nuget package dependency for the Workspace.
Attributes | |
---|---|
name |
Unique name for this rule |
srcs |
List of dotnet dll assemblies to use. |