标签: assembly-signing

c# - 你可以对强名称程序集进行"弱"程序集引用

由于各种原因,我宁愿不在我的项目中使用强名称(签名)程序集.但是,其中一个项目由sharepoint Web部件引用,这意味着它必须签名.

是否可以对此程序集进行签名,但是当我从其他项目引用它时,使用非强引用来执行此操作.这将给我的优势是为我的其余代码提供一个非签名程序集,但仍然允许它由sharepoint加载.

c# assemblies assembly-signing signed-assembly

6
推荐指数
1
解决办法
3474
查看次数

如何在保留其程序集元数据的同时强烈签署外部DLL?

我在项目中使用了一些未签名的库.因为我的应用程序是强签名的,所以库也必须如此.

我用以下方式签署这些库:

"%PROGRAMFILES%\Microsoft SDKs\Windows\v7.1\Bin\ildasm.exe" /nobar /all /out=library.il library.dll
"%WINDIR%\Microsoft.NET\Framework64\v4.0.30319\ilasm.exe" /dll /key=MyKey.snk library.il
Run Code Online (Sandbox Code Playgroud)

问题是任何元数据(例如版本号)都会在现在签名的DLL中丢失.这是一个问题,因为现在库之间的某些依赖关系被破坏了.如何保留版本号而不需要实际编译这些库的源代码?

UPDATE

它实际上是一个显示此问题的特定DLL,我发现它是使用ILMerge构建的.也许这就是问题所在.需要明确的是:ILMerge生成的DLL确实具有正确的元数据,只有在反汇编和重组后,元数据才会消失.

更新2

我在Reflector中打开了DLL,看起来至少版本号仍在那里.我一直在使用Windows资源管理器中的文件属性对话框/详细信息选项卡进行检查.所以我认为这是缺少的清单.

.net assembly-signing ilasm

6
推荐指数
1
解决办法
1805
查看次数

释放类库源,无需签名密钥文件,但是单元测试需要访问内部类,该怎么办?

情况如下:

  1. 我想将完整的源代码发布到类库中
  2. 我也希望发布二进制文件,由我签名,使用我不想发布的密钥文件
  3. 我将提供批处理文件和预构建步骤,如果不存在则在本地创建新的密钥文件,以便任何人都可以快速开始使用源代码
  4. 测试项目需要引用主项目中的内部类
  5. 要访问内部类,我需要向[assembly: InternalsVisibleTo("...")]主项目AssemblyInfo.cs文件添加一个属性
  6. 由于我正在签署项目输出,因此我需要指定该属性的PublicKey部分
  7. 这将绑定到密钥文件,我不愿意发布

那么,我该如何解决这个问题呢?

如果我签署主项目输出而不是测试库,并且只在InternalsVisibleTo属性中指定程序集名称,则会出现此编译时错误:

错误1朋友程序集引用'Mercurial.Net.Tests'无效.强名称签名程序集必须在其InternalsVisibleTo声明中指定公钥.C:\ Dev\VS.NET\Mercurial.Net\Mercurial.Net\Properties\AssemblyInfo.cs 22 31 Mercurial.Net

所以显然没有签署测试项目输出是不够的.

我唯一的选择是删除签署项目的设置,并修改项目文件作为我的二进制文件构建脚本的一部分?即.<SignAssembly>false</SignAssembly>在构建之前,搜索项目文件的元素并进行修改?

.net code-signing internalsvisibleto assembly-signing

6
推荐指数
1
解决办法
310
查看次数

使用Codebase加载程序集

基于这个问题,我尝试使用<codebase>定位外部组件.现在,当我运行该程序时,我收到一条错误消息,指出私有程序集位于appbase之外.我该如何解决这个问题?我看到的一个建议就是签署集会.我做了这个,但后来我的程序找不到程序集.当我取消签名时,我收到outside the appbase错误.如何加载位于其他地方使用<codebase>而不是安装到GAC的程序集?(探测也不起作用,似乎它仍然必须存在于应用程序文件夹中)我的配置文件:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>

        <assemblyIdentity name="NGameHost"

                          culture="neutral" />
        <codeBase version="1.0.0.0" 
                  href="C:/Program Files/NetworkGame3/api/NGameHost.exe"/>
      </dependentAssembly>
    </assemblyBinding>
  </runtime>

</configuration>
Run Code Online (Sandbox Code Playgroud)

c# codebase console-application .net-assembly assembly-signing

6
推荐指数
1
解决办法
9551
查看次数

在Mono上用F#签署DLL的问题

我试图在单声道F#中签署一个dll时遇到错误:

$ mono /usr/local/share/FSharp-2.0.0.0/bin/fsc.exe\
   --target:library \
   --keyfile:../../external/MyKeyFile.snk\
   AssemblyInfo.fs\
   ../../fs/FooBar.fs\  
   -o:FooBar.dll
Run Code Online (Sandbox Code Playgroud)

没有生成DLL,我收到此错误:

Microsoft (R) F# 2.0 Compiler build 2.0.0.0 Copyright (c) Microsoft Corporation. All Rights Reserved.`

error FS2014: A problem occurred writing the binary '': A call to StrongNameGetPublicKey failed (mscoree.dll)`
Run Code Online (Sandbox Code Playgroud)

密钥文件是在Windows中生成的,这有什么不同吗?

更新:

使用Mono 2.6.4

$ mono --version 

Mono JIT compiler version 2.6.4 (tarball Mon Jun 21 19:26:21 UTC 2010) 
Copyright (C) 2002-2010 Novell, Inc and Contributors. www.mono-project.com
TLS:           __thread
GC:            Included Boehm (with typed GC and Parallel Mark)
SIGSEGV:       altstack …
Run Code Online (Sandbox Code Playgroud)

mono f# assembly-signing

5
推荐指数
1
解决办法
600
查看次数

如何使用StrongNameKeyPair与密码保护密钥文件(pfx)?

我试图使用密码保护密钥文件(pfx)以编程方式签署程序集.但是,当我尝试使用StrongNameKeyPair时,我得到以下异常.

无法获取StrongNameKeyPair的公钥.在System.Reflection.StrongNameKeyPair.ComputePublicKey()处于System.Reflection.StrongNameKeyPair.get_PublicKey()

.net strongname code-signing pkcs#12 assembly-signing

5
推荐指数
1
解决办法
775
查看次数

签署exe会使通信变慢吗?

脚本

我有一个C#可执行文件,使用强密钥签名.从这个C#应用程序我使用'pinvoke'调用C++执行(没有签名).我观察到C++可执行文件的优化有很大的延迟.这有什么理由吗?

c# pinvoke assembly-signing c#-3.0 c#-4.0

5
推荐指数
1
解决办法
236
查看次数

使用ILMerge抛出异常创建签名库

我正在尝试创建包含Castle.Core的FakeItEasy的合并版本.我读到了有关ILMerge的信息,看起来这是我需要的解决方案.下载并构建FakeItEasy后,我将所需的所有文件(FakeItEasy.dll(.NET4),Castle.Core.dll(.NET4),ilmerge.exe,FakeItEasy.snk)复制到同一文件夹中.然后我运行以下命令:

ilmerge 
    /keyfile:FakeItEasy.snk 
    /out:..\FakeItEasy.dll 
    /t:library 
    /targetplatform:v4,C:\Windows\Microsoft.NET\Framework\v4.0.30319 
    FakeItEasy.dll Castle.Core.dll 
Run Code Online (Sandbox Code Playgroud)

得到以下结果:

An exception occurred during merging:                                                             
An attempt was made to load a program with an incorrect format. (Exception from HRESULT: 0x8007000B)                                                                                                
   at System.Compiler.Writer.MscorsnStrongNameSignatureGeneration(String wszFilePath, String wszKeyContainer, Byte[] pbKeyBlob, Int32 cbKeyBlob, IntPtr ppbSignatureBlob, IntPtr pcbSignatureBlob)  
   at System.Compiler.Writer.WritePE(String location, Boolean writeDebugSymbols, Module module, Boolean delaySign, String keyFileName, String keyName)                                              
   at System.Compiler.Writer.WritePE(CompilerParameters compilerParameters, Module module)        
   at ILMerging.ILMerge.Merge()                                                                   
   at ILMerging.ILMerge.Main(String[] args) 
Run Code Online (Sandbox Code Playgroud)

如果我放弃"/keyfile:FakeItEasy.snk",合并的程序集就会很好地创建,但这对我没有帮助,因为我需要一个签名版本.

我也尝试将目标平台指定为:

/targetplatform:v4,C:\Windows\Microsoft.NET\Framework64\v4.0.30319
Run Code Online (Sandbox Code Playgroud)

但结果是一样的.

.net ilmerge assembly-signing

5
推荐指数
1
解决办法
1425
查看次数

第三方DLL没有"强名"?

我的Visual Studio 2010解决方案引用了第三方专有DLL.

当我尝试编译解决方案时,错误消息显示为:

无法发出程序集:引用的程序集"NameOfAssembly.DLL"没有强名称

使用我自己的密钥签署第三方DLL是解决此问题的唯一方法吗?

.net c# vb.net visual-studio-2010 assembly-signing

5
推荐指数
2
解决办法
1万
查看次数

如何对我的WPF应用程序进行数字签名

我必须对在visual studio 2012中创建的WPF应用程序进行数字签名.goodday.com为此提供".spc"文件.但我的visual studio需要pfx文件格式.如何获得PFX格式的证书?

c# wpf code-signing assembly-signing code-signing-certificate

5
推荐指数
1
解决办法
2793
查看次数