我正在開發我的第一個自定義操作,但無法獲取生成的.CA.dll文件加載。繼承人最簡單的過程,其結果如下:WiX自定義操作項目 - BadImageFormatException
我創建了一個自定義操作項目並保留了所有的默認值。這個類看起來是這樣的:
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:無法加載文件或程序集「文件:/// d:\ CustomAction \ BIN \調試\ CustomAction.CA。 DLL「或其依賴之一。預計該模塊將包含程序集清單。
我也不能從我的WiX項目中引用自定義動作。變得非常沮喪!
編輯: 一看,當我通過VS測試經理我得到在應用程序事件日誌中的運行:
TmiDataManager.TryConvertPropertyValueToDisplayText:無法使用屬性描述符的類型轉換器轉換屬性值。 System.FormatException:輸入字符串的格式不正確。
在System.Number.StringToNumber(字符串str的NumberStyles選項,NumberBuffer &數的NumberFormatInfo信息,布爾parseDecimal)
在System.Number.ParseInt32(字符串s的NumberStyles風格的NumberFormatInfo信息)
在System.String。 System.IConvertible.ToInt32(的IFormatProvider提供商)
在System.Convert.DefaultToType(IConvertible值,類型TARGETTYPE,的IFormatProvider提供商)
在System.String.System.IConvertible.ToType(類型類型,的IFormatProvider提供商)
在系統.ComponentModel.EnumConverter.ConvertTo(ITypeDescriptorContext context,CultureInfo culture,Object value,Type destinationType)
在System.ComponentModel.TypeConverter.ConvertToString(對象的值)」
進一步編輯:我可以通過Assembly.LoadFrom加載正常CustomAction.dll,所以也許這是一個不同的問題給BadImageFormat的事情嗎?是否有任何理由空白的行動,沒有進一步的依賴不會加載到我的WiX項目?
您的CustomAction.CA.dll是否包含嵌入式清單?通過Windows應用程序日誌查看,會有一個條目,其中包含更多詳細信息爲什麼無法加載DLL。 – 2011-06-08 10:59:23
在上面添加了我的堆棧跟蹤,對我來說沒有多大意義。我只是使用默認設置,所以看不到在配置文件中使用字符串而不是數字的位置 – 2011-06-08 12:55:46