我正在开发我的第一个自定义操作,但我无法获取生成的.CA.dll文件。这是最简单的过程,结果是:
我创建了一个自定义操作项目并保留所有默认值。该课程如下:
using Microsoft.Deployment.WindowsInstaller;
namespace CustomAction
{
public class CustomActions
{
[CustomAction]
public static ActionResult CustomAction1(Session session)
{
session.Log("Begin CustomAction1");
return ActionResult.Success;
}
}
}
然后我构建程序集(在调试或发布中),它创建了一个CustomAction.CA.dll文件。然后我尝试运行此测试:
[TestMethod]
public void LoadAssembly()
{
Assembly.LoadFrom(@"D:\CustomAction\bin\Debug\CustomAction.CA.dll");
}
得到错误: System.BadImageFormatException:无法加载文件或程序集'file:/// D:\ CustomAction \ bin \ Debug \ CustomAction.CA.dll'或其依赖项之一。该模块应该包含一个程序集清单。
我也不能从我的WiX项目中引用自定义操作。真的很沮丧!
编辑:
看一看,当我运行VS测试管理器时,我在应用程序事件日志中得到以下内容:
TmiDataManager.TryConvertPropertyValueToDisplayText:无法使用属性描述符的类型转换器转换属性值。 System.FormatException:输入字符串的格式不正确
at System.Number.StringToNumber(String str,NumberStyles options,NumberBuffer& number,NumberFormatInfo info,Boolean parseDecimal)
在System.Number.ParseInt32(String s,NumberStyles style,NumberFormatInfo info)
在System.String.System.IConvertible.ToInt32(IFormatProvider提供者)
在System.Convert.DefaultToType(IConvertible值,Type targetType,IFormatProvider Provider)
在System.String.System.IConvertible.ToType(Type type,IFormatProvider provider)
在System.ComponentModel.EnumConverter.ConvertTo(ITypeDescriptorContext context,CultureInfo culture,Object value,Type destinationType)
在System.ComponentModel.TypeConverter.ConvertToString(Object value)“
进一步编辑:我可以通过Assembly.LoadFrom加载正常的CustomAction.dll,所以这可能是BadImageFormat的另一个问题吗?可能有任何理由没有进一步依赖的空白操作不会加载到我的WiX项目中吗?
答案 0 :(得分:3)
CustomAction.CA.dll是一个本机代码DLL,它包含托管代码程序集,并且知道如何在MSI中作为自定义操作运行。托管代码程序集是“CustomAction.dll。”