 ------
 Setting Assembly Keys
 ------
 ------
 26 Feb 2009
 ------
~~Licensed to the Apache Software Foundation (ASF) under one
~~or more contributor license agreements.  See the NOTICE file
~~distributed with this work for additional information
~~regarding copyright ownership.  The ASF licenses this file
~~to you under the Apache License, Version 2.0 (the
~~"License"); you may not use this file except in compliance
~~with the License.  You may obtain a copy of the License at
~~
~~    http://www.apache.org/licenses/LICENSE-2.0
~~
~~Unless required by applicable law or agreed to in writing,
~~software distributed under the License is distributed on an
~~"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
~~KIND, either express or implied.  See the License for the
~~specific language governing permissions and limitations
~~under the License.

Setting Assembly Keys

  Assembly keys are used to uniquely identify the project to be installed in the Global Assembly Cache or also referred to as GAC.
  
  To set an assembly key to a project, generate a strong name key by running the command

----
sn -k [filename] .snk
----
  
  Right click on the project and select <Set NPanday Compile Sign Assembly Key...>

[../../images/vs/assembly_key.jpg]
  
  Put the strong name key that was generated in the Assembly Sign Key field.

[../../images/vs/set_assembly_key.jpg] Setting assembly sign key

* Summary

  We have now covered much of the functionality of NPanday Visual Studio Add-in. In subsequent sections of the guide,
  we will examine the available configuration options.

  The next topic is {{{./configureRepository.html} Configuring a Remote Repository}}, or you can return to the
  {{{./index.html} index}}.
