Vraag Compileer webapplicatie ascx in dll


Is het mogelijk om een ​​webapplicatieproject .ascx (gebruikersbeheer) samen te stellen in een dll?

Ik wil het volgende doen:

  1. Gebruik hetzelfde besturingselement op meerdere websites
  2. Sluit css en .js in als bronnen in het besturingselement
  3. Super eenvoudig kunnen updaten. Als het gebruikersbeheer wordt bijgewerkt, wil ik alleen 1 .dll bijwerken

Ik heb dit artikel met succes gevolgd, http://msdn.microsoft.com/en-us/library/aa479318.aspx.

Dat maakt echter gebruik van websiteprojecten en ik kan js css als resources niet insluiten in websiteprojecten.

Om het even welke ideeën? Ga ik hier verkeerd over, moet ik de aanpak veranderen?


10
2018-05-10 20:34


oorsprong


antwoorden:


Conversie is eenvoudig en kan zelfs volledig worden geautomatiseerd. Het vereist eenvoudigweg het wijzigen van enkele instellingen en basisklassen in het DLL-project waarvoor u uw ASCX-besturingselementen wilt gebruiken.

1 ... Stel voor elke UserControl de Build Action (onder Eigenschappen) van het ASCX-bestand in op "Embedded Resource" en verwijder het bijbehorende designerbestand.

2 ... Sla het project op.

3 ... Klik met de rechtermuisknop op het project en kies "Project verwijderen".

4 ... Klik opnieuw met de rechtermuisknop en kies de optie "Edit * .csproj".

Wijzig secties die er zo uitzien (waarbij de asterisk uw klassenaam weergeeft):

<Compile Include="*.ascx.cs">
    <DependentUpon>*.ascx</DependentUpon>
    <SubType>ASPXCodeBehind</SubType>
</Compile>

om er zo uit te zien

<Compile Include="*.ascx.cs" />

Hierdoor worden de code achter de bestanden onafhankelijk van de ASCX-bestanden gecompileerd.

5 ... Sla wijzigingen op en klik met de rechtermuisknop op het project en kies "Project opnieuw laden".

6 ... Open al uw "* .ascx.cs" -bestanden en neem ze over van de volgende aangepaste klasse UserControl in plaats van de klasse System.Web.UI.UserControl (u moet misschien ouderklassen zoeken om deze stap te voltooien).

public class UserControl : System.Web.UI.UserControl
{
    protected override void FrameworkInitialize()
    {
        base.FrameworkInitialize();
        string content = String.Empty;
        Stream stream = Assembly.GetExecutingAssembly().GetManifestResourceStream( GetType().FullName + ".ascx" );
        using (StreamReader reader = new StreamReader(stream))
            content = reader.ReadToEnd();
        Control userControl = Page.ParseControl( content );
        this.Controls.Add( userControl );
    }
}

Deze basisklasse zorgt voor het laden en parseren van het ingesloten ASCX-bestand.

7 ... Ten slotte moet u mogelijk ASCX-bestanden in submappen plaatsen, zodat hun resourcenamen (automatisch bepaald door het pad van de map) overeenkomen met de volledige typenaam van de bijbehorende klasse (plus ".ascx"). Ervan uitgaande dat uw root-naamruimte overeenkomt met uw projectnaam, heeft een klasse met de naam "ProjectName.Namespace1.Namespace2.ClassName" zijn ASCX-bestand nodig in een submap "Namespace1 \ Namespace2", zodat het wordt ingesloten met de naam "ProjectName.Namespace1.Namespace2. ClassName.ascx".

En dat is het! Nadat u de DLL hebt gecompileerd en in een ander project hebt opgenomen, kunt u instanties van uw gebruikersbesturingselementen instantiëren met behulp van de "nieuwe" operator, net als elke andere klasse. Zoals altijd wordt uw controle "ingehaald" op de huidige pagina-gebeurtenis zodra deze als een onderliggende machtiging aan de pagina of een ander besturingselement op de pagina is toegevoegd.


5
2017-08-01 14:31



Het is moeilijk om gebruikersbedieningen op deze manier te gebruiken vanwege het ascx-bestand met opmaak. Als u herbruikbare besturingsbibliotheken wilt maken, kunt u beter aangepaste besturingselementen maken.


3
2018-05-10 20:41



Een andere manier is om gebruikersbesturing te converteren naar het aangepaste besturingselement. Er staat een leuk artikel op MSDN: een .ascx gebruikersbesturingselement omzetten in een herdistribueerbaar aangepast besturingselementdie precies beschrijft hoe dat te doen. Hier is de samenvatting:

  1. Schrijf uw gebruikersbediening zoals u normaal zou doen, meestal met behulp van de Visual Studio-ontwerper.
  2. Test het met een eenvoudige pagina voordat u het probeert te implementeren.
  3. Implementeer de toepassing om deze vooraf te compileren.
  4. Grijp de assembly van de gebruikersbesturing die is geproduceerd door de implementatiestap,   en je bent in wezen klaar: je hebt je eigen controle.
  5. Gebruik ten slotte uw aangepaste besturingselement in andere apps op dezelfde manier als u   gebruik altijd aangepaste besturingselementen.

Ik hoop dat dit helpt.


1
2017-10-18 08:03



Ik moest het een keer doen en ik volgde dit artikel

http://www.codeproject.com/KB/user-controls/EmbeddedUserControl.aspx

Het is gebaseerd op de mogelijkheid om een ​​virtueel bestandssysteem op verschillende plaatsen te monteren (een assembly, database, enz.)


0
2018-05-10 20:42



Er zijn nogal wat artikelen over hoe je dat precies kunt doen:

http://www.nathanblevins.com/Articles/Compile-a-Web-User-Control-into-a-DLL-.Net-c-.aspx

http://blogs.msdn.com/davidebb/archive/2005/10/30/487160.aspx 


0
2018-05-10 20:43



Ik weet dat dit oud is, maar ja het is mogelijk. Ik doe het altijd, zie https://kocubinski.wordpress.com/2013/05/06/compile-asp-net-webforms-ascx-usercontrols-into-assembly-for-re-use/


0
2017-12-29 05:35