2009-04-03 13 views
7

Mam plik GlobalAssemblyInfo.cs w katalogu głównym mojego rozwiązania, i mam coś takiego następującego wpisu, aby umożliwić silne nazewnictwo moich złożeń wyjściowych.GlobalAssemblyInfo.cs i silne nazewnictwo

#pragma warning disable 1699 
[assembly : AssemblyKeyFile("..\\keyfile.snk")] 
#pragma warning restore 1699 

Takie podejście ma dwie wady. Po pierwsze, AssemblyKeyFileAttribute jest przestarzałe, więc aby uniknąć ostrzeżeń kompilacji, potrzebuję linii pragma, które widzisz powyżej. Po drugie, albo muszę utrzymywać wszystkie moje projekty na tej samej głębokości w stosunku do katalogu głównego, aby użyć względnej ścieżki, albo użyć bezwzględnej ścieżki, która dyktuje lokalizację kasowania na komputerach innych użytkowników (i na serwerach ciągłej integracji/agentach budujących) .

Czy ktoś ma lepsze rozwiązanie niż to, inne niż przechodzenie przez każdy projekt ustawiający silne nazewnictwo w pliku projektu?

Odpowiedz

1

Te atrybuty do podpisywania kluczy zostały wycofane z ważnego powodu (wyciek informacji), co jest kolejnym powodem udania się na trasę projektu.

Jeśli masz dużo projektów, możliwe jest ustawienie ich za pomocą zarejestrowanego makra lub nawet bezpośrednie manipulowanie plikami .csproj (upewnij się, że zostały najpierw usunięte z VS).

2

Cóż, aby uniknąć problemu z ścieżką, można zamiast tego użyć [assembly:AssemblyKeyName(...)] (chociaż IIRC jest również przestarzałe); użyj sn -i, aby zainstalować nazwany klucz. Każdy komputer (który buduje) wymagałby dodania tego klucza.

Poza tym; tak, prawdopodobnie będziesz musiał edytować pliki projektu.

+0

Zgadzam się, to doprowadza mnie do drugiego numeru. –

1

Richard mówi dobrze o wycieku informacji - znalazłem posty od zespołu Microsoft .NET, gdzie to opisują. Więc Poszedłem za jego sugestią i wymyślić następujący cel NANT:

<target name="strongName" description="Strong names the output DLLs"> 
    <foreach item="File" property="filename"> 
     <in> 
     <items> 
      <include name="**/*.csproj"></include> 
      <exclude name="**/*.Test.csproj"></include> 
     </items> 
     </in> 
     <do> 
     <echo message="${filename}" /> 
     <xmlpoke file="${filename}" xpath="/m:Project/m:PropertyGroup/m:SignAssembly" value="false"> 
      <namespaces> 
      <namespace prefix="m" uri="http://schemas.microsoft.com/developer/msbuild/2003" /> 
      </namespaces> 
     </xmlpoke> 
     <xmlpoke file="${filename}" xpath="/m:Project/m:PropertyGroup/m:AssemblyOriginatorKeyFile" value="..\keyfile.snk"> 
      <namespaces> 
      <namespace prefix="m" uri="http://schemas.microsoft.com/developer/msbuild/2003" /> 
      </namespaces> 
     </xmlpoke> 
     </do> 
    </foreach> 
    </target> 

W <nazw> elementem jest niezbędne do XPath, które należy rozwiązać w pliku csproj - Należy pamiętać, że jest to dla VS2008 i w VS2005 może być potrzebne coś innego.