我正在努力让Maven与ProGuard合作.
我想要实现的目标如下:
在我的源文件上运行ProGuard并生成混淆的类
创建一个引用主类的清单文件,以便我可以将其作为jar执行
解压缩所有相关的库jar并创建一个包含它们的巨大jar.此文件只应与.class和.xml文件联系.
将它们组装成包含各种README.txt文件的.zip和tar.gz文件,依此类推.
到目前为止,我有这样的事情:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.2</version>
<configuration>
<archive>
<manifest>
<mainClass>com.class.path.MainClass</mainClass>
</manifest>
</archive>
<includes>
<include>**/*.class</include>
<include>**/*.xml</include>
</includes>
</configuration>
</plugin>
<plugin>
<groupId>com.pyx4me</groupId>
<artifactId>proguard-maven-plugin</artifactId>
<configuration>
<options>
<option>-allowaccessmodification</option>
</options>
<obfuscate>true</obfuscate>
<injar>classes</injar>
<outjar>${project.build.finalName}.jar</outjar>
<outputDirectory>${project.build.directory}</outputDirectory>
<proguardInclude>src/main/assembly/proguard.conf</proguardInclude>
<libs>
lib/rt.jar</lib>
</libs>
</configuration>
<executions>
<execution>
<phase>process-classes</phase>
<goals>
<goal>proguard</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<executions>
<execution>
<id>assembly</id>
<phase>package</phase>
<goals>
<goal>assembly</goal>
</goals>
<configuration>
<descriptors>
<descriptor>
src/main/assembly/bin.xml
</descriptor>
</descriptors>
</configuration>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
但我没有快乐.任何人都可以给我任何模糊的指示吗?
先谢谢,马特
我有一个集会.在这个程序集中,我有一个类和接口.我需要在运行时加载这个程序集,并希望创建该类的对象,并且还想使用该接口.
Assembly MyDALL = Assembly.Load("DALL"); // DALL is name of my dll
Type MyLoadClass = MyDALL.GetType("DALL.LoadClass"); // LoadClass is my class
object obj = Activator.CreateInstance(MyLoadClass);
Run Code Online (Sandbox Code Playgroud)
这是我的代码.怎么可以改进?
我有一个我想运行的Iron Python脚本,然后让ipy解释器输出一个我可以在其他机器上运行的程序集.我怎么做?有没有我可以传递给ipy.exe的开关?
有没有办法将您的程序集保护到类/属性和类/方法级别,以防止从另一个未由我们公司签名的程序集中使用/调用它们?
我想这样做,没有强烈命名的任何要求(如使用StrongNameIdentityPermission)并坚持如何签署程序集.我真的不想使用InternalsVisibleTo属性,因为在不断变化的软件生态系统中无法维护.
例如:
情景一
Foo.dll由我的公司签名,Bar.dll根本没有签名.
Foo的A级酒吧有B级
A类有公共方法GetSomething()B类试图调用Foo.A.GetSomething()并被拒绝
被拒绝可能是一个例外,或者在某种程度上被忽略
情景二
Foo.dll由我公司签名,Moo.dll也由我公司签名.
Foo有A级Moo有C级
A类有公共方法GetSomething()C类试图调用Foo.A.GetSomething()并且不被拒绝
我在你面前拿着一个DLL.仅使用Win32 SDK,您能告诉我这个DLL是否是.NET程序集吗?
为什么?我们的应用程序以DLL的形式加载插件.我们正在尝试扩展这些插件的定义以允许.NET程序集,但接口将是不同的,因此加载器将需要知道DLL在加载之前是管理还是非管理.
我从.NET的角度知道,版本为1.13的程序集被认为是比版本1.2更新的版本,因为版本中的每个数字都是单独计算的.然而,从数值的角度来看,1.13 <1.2.
问题归结为为客户发布更新时的可读性.从.0到.9它们都是一样的,但是在.10你必须区分.那么,你是否将点数发布的数量限制为9,然后在达到.9时增加主要版本?
请不要认为最终用户了解典型的开发版本编号方案.
更新:
不要把它想象成十进制数.(.)是不同字段之间的分隔符.每个字段的含义(例如):
Run Code Online (Sandbox Code Playgroud)MajorRelease.MinorRelease.BuildNumber
绝对!当我查看版本号时,我看到了它.但这不是你的普通乔读取文字"1.13"的方式.我想作为程序员,很容易将我们的理解投射到我们的用户身上.这就是为什么我对数字混淆经验的回应感兴趣.这可能不是一个真正的问题,或者它可能只是被忽略了.
更新2:响应"提供文档"或"向用户解释"类型的解决方案:它们不起作用!:)如果你必须向用户解释版本号,你已经使它变得比它需要的更复杂.虽然一项技术的主要受众可能是许多公司的开发人员,但软件的实际采购和管理由没有开发或技术背景的秘书和文职人员处理.如果他们的经理问他们"是否有可用的新版本1.9"并且他们看到"1.11"他们可能不会将其注册为新版本.
我正在尝试使用C#代码动态获取数据库表结构,如下所示:
using Microsoft.SqlServer.Management.Common;
using Microsoft.SqlServer.Management.Smo;
public class LoadStuff
{
...
public void LoadDatabase(string vDatabaseName)
{
using (var vSqlConnection = new SqlConnection(DatabaseConnectionString))
{
var vConnection = new ServerConnection(vSqlConnection);
var vServer = new Server(vConnection);
var vDatabase = vServer.Databases[vDatabaseName];
var vTables = vDatabase.Tables;
}
}
}
Run Code Online (Sandbox Code Playgroud)
但是,我找不到.dll文件来添加引用.我正在使用Visual Studio 2010 Professional.有什么建议?
例如,在这里阅读了.NET中的强名称后,我有以下问题:
我们有一个Authenticode代码签名证书,我们用它来签署所有EXE,DLL和MSI文件.这样做的好处是,Windows知道MSI来自可靠的来源,并且如果需要,还可以验证每个文件的真实性.
我们目前不使用.NET强名称.我已经读过,强命名文件本质上意味着它使用自签名证书进行数字签名.我对此的看法是,由受信任的证书颁发机构签名的Authenticode证书比自签名证书更有价值,该证书的真实性无论如何都无法验证,因为它们缺少根证书(我们不打算将其分发给最终用户,是我们!?).
问题:如果已使用Authenticode签名,是否还有其他强命名程序集的值?
我知道如何从文件名加载程序集,也从GAC加载程序集.由于我的.msi文件会将一个dll项目放入GAC,我想知道是否有可能从GAC加载它而不知道FullName(我的意思是只是使用程序集名称,甚至是dll文件名),因为我必须从另一个项目加载此程序集.
我的问题与我在"System.IO.Compression"命名空间中找不到"ZipFile"类有关
但我已经为我的4.5.1 webforms项目引用了DLL:
我项目的属性给了我:Target framework: .Net Framework 4.5.1.
和web.config:
<compilation debug="true" targetFramework="4.5" />
Run Code Online (Sandbox Code Playgroud)
我错过了什么?
解决方案是手动引用web.config中的程序集但为什么呢?为什么添加引用对话框中的复选框不足?
<assemblies>
<add assembly="System.IO.Compression, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
<add assembly="System.IO.Compression.FileSystem, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
</assemblies>
Run Code Online (Sandbox Code Playgroud)
assemblies ×10
.net ×4
c# ×4
dll ×2
load ×2
security ×2
.net-4.5 ×1
authenticode ×1
gac ×1
ironpython ×1
java ×1
managed ×1
maven-2 ×1
plugins ×1
proguard ×1
reference ×1
reflection ×1
smo ×1
strongname ×1
unmanaged ×1
versioning ×1