在Visual Studio 2017中使用Fody/Costura和Obfuscar

11

我想询问是否可以同时使用Fody-CosturaObfuscar,前者将依赖项嵌入到可执行文件中,后者用于混淆。

目前我遇到了问题,因为在Visual Studio 2017中,Costura的msbuild目标会先于obfuscar的目标执行(然后obfuscar会抱怨缺少依赖文件)。

由于obfuscar本身不提供目标,所以我正在使用MSBuild.Obfuscar

有没有办法将这两个工具结合起来,比如通过指定目标的顺序?


Obfuscar本身没有“targets”文件。 - Lex Li
你说得对,我正在使用MSBuild.Obfuscar来获取目标。 - TheGuy
请将问题的那部分标注清楚,不要误导人们。 - Lex Li
2个回答

2

我创建了一个快速的框架控制台应用程序项目,并添加了Costura、MSBuild.Obfuscar和NLog。为了让Obfuscar正常工作,我只需要编辑Obfuscar.xml文件,将实际的程序集名称包含进去即可:

<?xml version="1.0" encoding="utf-8"?>
<Obfuscator>
  <Var name="InPath" value="bin\Release" />
  <Var name="OutPath" value="$(InPath)\obfuscated" />
  <Var name="HidePrivateApi" value="true" />
  <!-- was: file="$(InPath)\"  -->
  <Module file="$(InPath)\ConsoleApp1.exe" />
</Obfuscator>

这对我来说很好用。生成的程序集包含我的代码混淆以及将NLog作为资源包含在内。如果您看到不同的结果,可能与您的解决方案包含的其他NuGet包有关。


我正在使用与您相同的配置。只要添加了MahApps.Metro,问题就会出现,如果没有它,一切都正常工作。我现在会尝试找到解决方案。谢谢。 - TheGuy
既然你提到了MahApps.Metro,我又尝试了一下使用WPF项目,包括Costura、MSBuild.Obfuscar、NLog和MahApps.Metro。对我来说也构建成功了,没有错误。 - asherber
你是刚刚添加了这个包还是正在积极使用它?因为当我刚刚添加这个包时,它能够完美运行,但是一旦我用Metro窗口替换普通窗口,它就停止工作了。 - TheGuy
我已经在XAML和代码后台中用Metro窗口替换了主窗口,但我没有添加任何控件或代码。如果有特定的步骤需要我执行以重现问题,请告诉我。 - asherber
1
Fody Costura可以压缩DLL文件,但它并没有被混淆。如果您使用ILSpy保存文件并使用https://github.com/G4224T/Fody-Costura-Decompress进行解压缩,然后再次在ILSpy中查看结果,文件就不会被混淆了。您能否解决这个问题? - Juan Pablo
@JuanPablo 你说得完全正确。压缩的程序集并没有混淆。 - TheLegendaryCopyCoder

0

我成功重现了这个错误。我使用了asherber的答案,但是一旦我将构建更改为发布版本,它就不再起作用了。
("无法解决依赖项:MahApps.Metro")

为了使其在发布版本上也能成功构建,我不得不将引用的MahApps.Metro.dll复制到Release文件夹中。
如果你是从NuGet安装的,你可以在项目文件夹的packages文件夹中找到.dll文件。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接