Reputation: 33978
I have the following error when activating a feature, this feature is supposed to install a timer job.
Failed to create receiver object from assembly "MundoNetElements, Version=1.0.0.0, Culture=neutral, PublicKeyToken=9922d1e7c40d98f8", class "MundoNetElements.Features.NotificacionesContratosJob.NotificacionesContratosJobEventReceiver" for feature "MundoNetElements_NotificacionesContratosJob" (ID: 33578802-a775-4777-9317-518bcdaceb06).: System.ArgumentNullException: Value cannot be null. Parameter name: type at System.Activator.CreateInstance(Type type, Boolean nonPublic) at Microsoft.SharePoint.Administration.SPFeatureDefinition.get_ReceiverObject()
This is my code,which doesnt have anything special and used several sample codes from other websites.
.feature
<?xml version="1.0" encoding="utf-8"?>
<feature xmlns:dm0="http://schemas.microsoft.com/VisualStudio/2008/DslTools/Core" dslVersion="1.0.0.0" Id="e67975ff-4d4f-4f6a-9349-e46cc0398745" alwaysForceInstall="true" description="This job executes periodically the notification process and the cleaning for the Mundo Net application" featureId="e67975ff-4d4f-4f6a-9349-e46cc0398745" imageUrl="" receiverAssembly="$SharePoint.Project.AssemblyFullName$" receiverClass="$SharePoint.Type.5de345c1-6a4c-48d8-8a8f-f80c531b438a.FullName$" scope="Site" solutionId="00000000-0000-0000-0000-000000000000" title="MundoNetJob" version="" deploymentPath="$SharePoint.Project.FileNameWithoutExtension$_$SharePoint.Feature.FileNameWithoutExtension$" xmlns="http://schemas.microsoft.com/VisualStudio/2008/SharePointTools/FeatureModel" />
template.xml
<?xml version="1.0" encoding="utf-8" ?>
<Feature xmlns="http://schemas.microsoft.com/sharepoint/">
</Feature>
Event Receiver
using System;
using System.Runtime.InteropServices;
using System.Security.Permissions;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Administration;
using Microsoft.SharePoint.Security;
namespace MundoNetElements.Features.MundoNetJob
{
/// <summary>
/// Esta clase controla los eventos generados durante la activación, desactivación, instalación, desinstalación y actualización de características.
/// </summary>
/// <remarks>
/// El GUID asociado a esta clase se puede usar durante el empaquetado y no se debe modificar.
/// </remarks>
[Guid("5de345c1-6a4c-48d8-8a8f-f80c531b438a")]
public class MundoNetJobEventReceiver : SPFeatureReceiver
{
const string List_JOB_NAME = "MundoNetJob";
public override void FeatureActivated(SPFeatureReceiverProperties properties)
{
SPSite site = properties.Feature.Parent as SPSite;
foreach (SPJobDefinition job in site.WebApplication.JobDefinitions)
{
if (job.Name == List_JOB_NAME)
job.Delete();
}
// install the job
MundoNetElements.MundoNetJob listLoggerJob = new MundoNetElements.MundoNetJob(List_JOB_NAME, site.WebApplication);
SPDailySchedule schedule = new SPDailySchedule();
schedule.BeginHour = 23;
schedule.BeginMinute = 0;
schedule.BeginSecond = 0;
schedule.EndHour = 23;
schedule.EndMinute = 15;
schedule.EndSecond = 0;
listLoggerJob.Schedule = schedule;
listLoggerJob.Update();
}
public override void FeatureDeactivating(SPFeatureReceiverProperties properties)
{
SPSite site = properties.Feature.Parent as SPSite;
foreach (SPJobDefinition job in site.WebApplication.JobDefinitions)
{
if (job.Name == List_JOB_NAME)
job.Delete();
}
}
}
}
And the timer job
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Administration;
namespace MundoNetElements
{
public class MundoNetJob : SPJobDefinition
{
public MundoNetJob() : base()
{
}
public MundoNetJob(string jobName, SPService service, SPServer server, SPJobLockType targetType) : base(jobName, service, server, targetType)
{
}
public MundoNetJob(string jobName, SPWebApplication webApplication) : base(jobName, webApplication, null, SPJobLockType.ContentDatabase)
{
this.Title = "Mundo Net job";
}
public override void Execute(Guid contentDbId)
{
// get a reference to the current site collection's content database
//SPWebApplication webApplication = this.Parent as SPWebApplication;
//SPContentDatabase contentDb = webApplication.ContentDatabases[contentDbId];
//// get a reference to the "ListTimerJob" list in the RootWeb of the first site collection in the content database
//SPList Listjob = contentDb.Sites[0].RootWeb.Lists["ListTimerJob"];
//// create a new list Item, set the Title to the current day/time, and update the item
//SPListItem newList = Listjob.Items.Add();
//newList["Title"] = DateTime.Now.ToString();
//newList.Update();
}
}
}
Upvotes: 2
Views: 858
Reputation: 1
Have you renamed your namespace? SharePoint is trying to create an object in namespace MundoNetElements.Features.NotificacionesContratosJob. The event receiver you've included has namespace MundoNetElements.Features.MundoNetJob
Hope this helps.
Upvotes: 0