Mam aplikację internetową wdrożoną na moim lokalnym serwerze IIS pod numerem Sites\Default
, działa dobrze i teraz chcę, aby była bezpieczniejsza - chcę szyfrować ciągi połączeń i ustawienia aplikacji .
Wewnątrz plik pubxml Dodałem tę linię:Publikowanie z Visual Studio i automatyczne szyfrowanie ustawień aplikacji przy użyciu aspnet_regiis
<MSDeployEnableWebConfigEncryptRule>true</MSDeployEnableWebConfigEncryptRule>
ale tylko szyfruje połączeń sznurki. wiem, że mogę ręcznie zadzwonić:
C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis -pe "appSettings" -site Default -app "/"
na moim serwerze po wdrożeniu do zaszyfrowania pliku zewnętrznego zawierającego AppSettings, ale muszę to zrobić ręcznie.
Moje pytanie brzmi: jak mogę wdrożyć stronę z Visual Studio (Build> Publish) i czy ta komenda aspnet_regiis
zostanie wykonana automatycznie po pomyślnym opublikowaniu.
I found information że mogę użyć runcommand
i other about bat files, ale nie wywołuję MSDeploy z wiersza poleceń.
Znalazłem również informacje, że powinienem zbudować dostawcę niestandardowego i zadzwonić do niego z MSDeploy.
Jak mogę edytować mój plik pubxml, aby uzyskać takie zachowanie?
Edit1:
udało mi się zaczepić After Deploy
docelowy przy użyciu:
<Target Name="EncryptAppSettings" AfterTargets="MSDeployPublish" >
<Message Text="Encrypting appSettings" />
<Exec Command="aspnet_regiis -pe "appSettings" -site Default -app "/"" />
<Message Text="AppPath: $(DeployIisAppPath)" />
</Target>
Ale teraz mam ten błąd:
The command "aspnet_regiis -pe "appSettings" -site Default -app "/"" exited with code 9009.
EDIT2:
mam wypróbowany przy użyciu polecenia runCommand w ten sposób:
<ItemGroup>
<MsDeploySourceManifest Include="runCommand">
<path>aspnet_regiis -pe "appSettings" -site Default -app "/"</path>
<waitInterval>10000</waitInterval>
<AdditionalProviderSettings>waitInterval</AdditionalProviderSettings>
</MsDeploySourceManifest>
</ItemGroup>
ale nie miałem szczęścia. I found blog o postSync: runCommand, ale chciałbym wywołać to bezpośrednio z VS, więc chciałbym dodać to do opublikowania profilu.
Edit3:
Dodaję mój profil publikuje poniżej:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<WebPublishMethod>MSDeploy</WebPublishMethod>
<LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
<LastUsedPlatform>Any CPU</LastUsedPlatform>
<SiteUrlToLaunchAfterPublish />
<LaunchSiteAfterPublish>True</LaunchSiteAfterPublish>
<ExcludeApp_Data>False</ExcludeApp_Data>
<MSDeployServiceURL>192.168.5.50</MSDeployServiceURL>
<DeployIisAppPath>Default</DeployIisAppPath>
<RemoteSitePhysicalPath />
<SkipExtraFilesOnServer>False</SkipExtraFilesOnServer>
<MSDeployPublishMethod>WMSVC</MSDeployPublishMethod>
<EnableMSDeployBackup>True</EnableMSDeployBackup>
<MSDeployEnableWebConfigEncryptRule>True</MSDeployEnableWebConfigEncryptRule>
<UserName>LocalAdmin</UserName>
<_SavePWD>True</_SavePWD>
<PublishDatabaseSettings>
<Objects xmlns="">
<ObjectGroup Name="ApplicationDbContext" Order="1" Enabled="False">
<Destination Path="Data Source=192.168.5.51;Initial Catalog=GameBit;User ID=GUser;Password=MyRealPassword;Application Name=EntityFramework" Name="Data Source=192.168.5.51;Initial Catalog=GameBit;User ID=GUser;Password=MyRealPassword;MultipleActiveResultSets=True;Application Name=EntityFramework" />
<Object Type="DbCodeFirst">
<Source Path="DBContext" DbContext="Api.ApplicationDbContext, Api" Origin="Configuration" />
</Object>
</ObjectGroup>
</Objects>
</PublishDatabaseSettings>
</PropertyGroup>
<PropertyGroup>
<UseMsdeployExe>true</UseMsdeployExe>
<AllowUntrustedCertificate>True</AllowUntrustedCertificate>
</PropertyGroup>
<ItemGroup>
<MSDeployParameterValue Include="$(DeployParameterPrefix)ApplicationDbContext-Web.config Connection String">
<ParameterValue>metadata=res://*/Model.csdl|res://*/Model.ssdl|res://*/Model.msl;provider=System.Data.SqlClient;provider connection string="Data Source=192.168.5.51;Initial Catalog=GameBit;User ID=GUser;Password=MyRealPassword;MultipleActiveResultSets=True;Application Name=EntityFramework"</ParameterValue>
</MSDeployParameterValue>
</ItemGroup>
<!--<ItemGroup>
<MsDeploySourceManifest Include="runCommand">
<Path>dir</Path>
</MsDeploySourceManifest>
</ItemGroup>-->
<!--<Target Name="EncryptImportantSettings" AfterTargets="MSDeployPublish" >
<Message Text="Encrypting appSettings" />
--><!--<Exec Command="aspnet_regiis -pe "appSettings" -site Default -app "/"" />--><!--
<ItemGroup>
<MsDeploySourceManifest Include="runCommand">
<path>dir/b >> C:\temp\log.txt</path>
--><!--<waitInterval>10000</waitInterval>--><!--
--><!--<AdditionalProviderSettings>waitInterval</AdditionalProviderSettings>--><!--
</MsDeploySourceManifest>
</ItemGroup>
<Message Text="AppPath: $(DeployIisAppPath)" />
</Target>-->
</Project>
Zauważyłem, że gdy używam MSDeploy widzę polecenia, który jest wykonywany podczas rozpatrzenie:
"C:\Program Files (x86)\IIS\Microsoft Web Deploy V3\msdeploy.exe" -source:manifest='D:\GameBit\API\obj\Release\Package\API.SourceManifest.xml' -dest:auto,ComputerName="https://192.168.5.50:8172/msdeploy.axd?site=Default",UserName='LocalAdmin',Password="MyRealPassword",IncludeAcls='False',AuthType='Basic' -verb:sync -enableRule:EncryptWebConfig -enableRule:EncryptWebConfig -disableLink:AppPoolExtension -disableLink:ContentExtension -disableLink:CertificateExtension -setParamFile:"D:\GameBit\API\obj\Release\Package\API.Publish.Parameters.xml" -allowUntrusted -retryAttempts=2 -userAgent="VS12.0:PublishDialog:WTE12.5.60612.0"
Czy mogę dodać -postSync:runCommand=""
do tego polecenia z profilu publikowania? Jako I found on MS site ten parametr pozwala na wykonanie polecenia na komputerze docelowym.
EDIT4:
znalazłem informacje o Web Deploy Operation Settings i ustawienie postSync, ale nie wiem, gdzie go ustawić, ja nie chce zmieniać Microsoft.Web.Publishing.targets
z folderu MSBuild
muszę wykonać polecenie na zdalnym komputerze po pomyślnym opublikowaniu.
Hej, natknąłem się na to przez czystego szczęścia. Może powinieneś usunąć jeden tag i dodać tag "asp.net" do swojego pytania, aby uzyskać więcej ekspozycji? – HamZa
@HamZa dzięki za podpowiedź. Gotowe. – Misiu
Zastosowanie pełna ścieżka do aspnet_regiis i ująć w cudzysłów polecenie '' ' ' ''. Komenda nie jest poprawnie umieszczona na konsoli (* spróbuj ją wyświetlić i zobacz *) lub nie można nadpisać tego pliku, ponieważ coś blokuje. –
SACn