2011-06-08 155 views
2

我正在開發我的第一個自定義操作,但無法獲取生成的.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項目?

+0

您的CustomAction.CA.dll是否包含嵌入式清單?通過Windows應用程序日誌查看,會有一個條目,其中包含更多詳細信息爲什麼無法加載DLL。 – 2011-06-08 10:59:23

+0

在上面添加了我的堆棧跟蹤,對我來說沒有多大意義。我只是使用默認設置,所以看不到在配置文件中使用字符串而不是數字的位置 – 2011-06-08 12:55:46

回答

3

CustomAction.CA.dll是一個本機代碼DLL,它包含託管代碼程序集,並知道如何在MSI中作爲自定義操作運行。託管代碼程序集是「CustomAction.dll」。

+0

我看過的所有說明告訴我要引用.CA.dll文件來自我的WiX項目。當我嘗試這個時,我得到「無法添加對D:\ CustomAction \ bin \ Debug \ CustomAction.CA.dll的引用。請確保該文件是可訪問的,並且它是有效的WiX引用。」 我在其他地方看到了一個很好的調試方法,通過LoadAssembly方法... – 2011-06-08 12:48:32

+1

您可以在您的WiX創作中引用自定義動作DLL(例如,Binary,CustomAction元素)。Visual Studio中的「添加引用」是爲了包含WiX擴展(這只是爲了增加混淆,可以包含自定義操作)。 – 2011-06-08 13:39:33

+0

Doh!現在已經說出了總的意義,現在一切都按我的希望工作。太感謝了! – 2011-06-08 15:09:33