To simplify the creation of an AssemblyInfo.cs file, for your C#/F#/VB.Net/C++.Net projects, you can use the AssemblyInfoTask. Be sure to require ‘albacore’ at the top of your rakefile, after installing the Albacore gem.
Here is an example of how to use the AssemblyInfoTask
desc "Run a sample assembly info generator" assemblyinfo :assemblyinfo do |asm| asm.version = "0.1.2.3" asm.company_name = "a test company" asm.product_name = "a product name goes here" asm.title = "my assembly title" asm.description = "this is the assembly description" asm.copyright = "copyright some year, by some legal entity" asm.custom_attributes :SomeAttribute => "some value goes here", :AnotherAttribute => "with some data" asm.output_file = "lib/spec/support/AssemblyInfo/AssemblyInfo.cs" end
The output_file is the name and location of the file that will have the assembly information and attributes written to it. The file with either be created, or overwritten.
If you do not provide an output_file, the rake task will fail and an exception will be logged.
F, [2009-09-28T09:27:37.938000 #7368] FATAL -- : output_file cannot be nil rake aborted! output_file cannot be nil
The input_file is the name and location of an existing file that contains assembly information and attributes to be written to the output_file. Each attributes can be overridden using the built in AssemblyInfoTask attributes (see below).
To simplify the use of certain attributes, the AssemblyInfoTask includes a set of built in attribute settings. Each of these settings are optional. If you do not set them, or if you set them to nil, they will not be written to the output file.
The assembly version information. This is typically a “#.#.#.#” format, but can be any valid .NET version # format.
The file version for the assembly. This is typically a “#.#.#.#” format, but can be any valid .NET version # format.
The name of the company that owns or is creating / maintaining the assembly in question. For example, “My Company, Inc.”
The name of the product that this assembly belongs to. For example, “FooBar Widget Maker”
The specific title of the assembly in question. This is used to differentiate the assembly’s name from the product’s name. For example the “Widget Factory” assembly may be part of the “FooBar Widget Maker” project.
A description of what the assembly in question does. For example, “Builds the Widgets from configuration settings”.
The copyright information for the assembly in question. For example, “Copyright ©2009 MyCompany, Inc. All Rights Reserved.”
The trademark information for the assembly in question. For example, “MyProductName™”
Determines whether or not an assembly is visible to the COM system, through COM interop. The only valid options for com_visible are true and false. These values must be specified as actual values, not strings.
asm.com_visible = true
Sets the guid, as a string, for the COM interop system to use when making your assembly COM visible.
Sets the output language. You can choose between these output languages:
asm.language = "F#"
Alternatively, use these expressions:
asm.lang_engine = FSharpEngine.new
This allows you to specify attributes that are not supported through the built-in attributes, listed above. This also allows you to have more creative control over the data that ends up in the parameters for the attribute – if any data is needed, at all.
You can specify multiple custom attributes through a hash literal. The key of the hash will be used as the attribute’s class name. The value of the hash will be used as the parameter that is passed into the attribute constructor.
The example above will generate the following:
[assembly: SomeAttribute("some value goes here")] [assembly: AnotherAttribute("with some data")]
You can specify a nil value for a custom attribute. This will cause the attribute to be generated with no parameters in the constructor. For example:
asm.custom_attributes :EmptyAttribute => nil
will generate this attribute in the output file
You can specify literal values for a custom attribute. This will cause the attribute to be generated with no quotes around the parameter in the constructor. For example:
asm.custom_attributes :BooleanAttribute => true
will generate this attribute in the output file
By default, the following namespace / using statements are included:
using System.Reflection; using System.Runtime.InteropServices;
If you need additional namespace / using statements, you can supply them through the custom ‘.namespaces’ setting.
You can specify as many namespaces as you need, using an array
asm.namespaces 'MyCompany.SomeNamespace', 'Another.Namespace.Here'
This will turn the supplied namespaces into ‘using’ statements at the top of the output file.
The AssemblyInfoTask uses the built in logging options to provide some potentially useful information at run-time.
The default information that will be logged includes the location of the assembly info file that is being generated. The path of the file will be fully expanded to include the drive letter and all folders. This can be used to verify that you are generating the file to the correct location.
I, [2009-09-28T08:58:34.801000 #2368] INFO -- : Generating Assembly Info File At: D:/Dev/Derick-GitHub/test/TestSolution/TestSolution/Properties/AssemblyInfo.cs
If the log_level is set to :verbose, the AssemblyInfoTask will also generate a log message for every attribute that is generated.
D, [2009-09-28T09:01:02.883000 #876] DEBUG -- : Build Assembly Info Attribute: [assembly: AssemblyTitle("my assembly name")] D, [2009-09-28T09:01:02.884000 #876] DEBUG -- : Build Assembly Info Attribute: [assembly: AssemblyCompany("my company, inc.")] D, [2009-09-28T09:01:02.884000 #876] DEBUG -- : Build Assembly Info Attribute: [assembly: AssemblyVersion("18.104.22.168")]
This task supports configuration via an external YAML file. For more information, see the yamlconfig page.