VS 2012にWebアプリケーションプロジェクトがあり、Web公開ツールを使用すると正常にビルドされますが、公開ターゲット(この場合はファイルシステム)にファイルはコピーされません。
ビルド出力を見ると、すべてobj\Release\Package\PackageTmp \に正しくコピーされているのがわかりますが、ビルド出力に表示されるのはこれだけです。
4>プロジェクト "{Project} .csproj"の構築が完了しました。
4>既存のファイルを削除しています...
4>公開フォルダ/ ...
4> ==========ビルド:3成功、0失敗、1最新、0スキップ==========
=========================== 1:1成功、0失敗、0スキップ==========
パブリッシュが成功したと言っても、パブリッシュのターゲットディレクトリにファイルがありません。
私はこれを複数のプロジェクトで見てきましたが、時にはSolution/Platformの設定がこの問題を引き起こしているように見えますが、正確な原因を特定できていません。
誰かがこれが起こっているのを見たことがありますか、またはこれを正しく機能させる方法についての考えを持っていますか?
更新日
これに対する回避策を見つけたかもしれません。私はちょうどこれが再び起こったのですが、私はパブリッシュ設定をいじっていました。 [設定]タブで選択した[設定]を別の設定に変更してから、すべてのファイルを使用したい設定に戻すと、再度公開が開始されました。うまくいけば、これは将来的に他のプロジェクトで動作します。
PDATE 2:
私はMicrosoft Connectにバグを投稿し、VS Web開発チームの開発者から聞きました。彼は、彼らが彼らの内部ビルドでこの問題を修正したと言いました、そして、この問題を解決するであろう公開ツールへの更新をまもなくリリースするでしょう。
PDATE 3:
これは最近Visual Studio 2012 Update 2で修正されました。
これは、vs2012のRCで作成されたソリューション/プロジェクトが原因である可能性があります。これは私の数ヶ月前に起こり、私のソリューションビルド構成が私のプロジェクト構成と一致することを確認することによって問題を修正しました...
VS2012 Express for Webを使用してvs2012RCで最初に作成されたのと同じソリューションを開いたときに、私は最近同じ問題を経験しました。私はオリジナルのポスターが示唆していることと全く同じようにし、それが私の問題を解決しました。
これが私を答えに導いたスレッドです。
connect.Microsoft.com/VisualStudio/feedback/details/746321/publish-web-application-fails
上記の会話からの適切な回答は、次のようなものでした。
マイクロソフトによる投稿2012年6月13日の12:00 PMこんにちはアンドリュー、
これは、ソリューション構成とプロジェクト構成の処理方法におけるバグでした。我々は誤ってそれらが同じであると仮定し(例えば、SolutionのRelease | x86は各プロジェクトをRelease | x86に設定するでしょう)、それは私たちがファイルを公開するために間違ったビルドプロパティを使うことを引き起こしました。
回避策は、ソリューション構成とビルド構成を一致させることです。この問題は、Visual Studio 2012の次のリリースで修正される予定です。
ありがとう、 - Jimmy Lewis SDET、ビジュアルWeb開発チーム
同じ問題です。回避策は、発行設定をリリースからデバッグに変更することでした。再公開してからリリースに戻ります。
もう少し詳しく言うと。公開プロファイルを作成すると作成されるファイルが2つあります。
NewProfile.pubxml
NewProfile.pubxml.user
これらのファイルがPublishProfileフォルダにあるプロジェクトをソース管理から開くと、.pubxml
ファイルのみがあり、.publxml.user
ファイルはないので、プロジェクトを開いたときに.publxml.user
ファイルが作成されます。その場で新しい.publxml.user
を作成すると、xmlは次のようになります。
<Project ToolsVersion="4.0" xmlns="http://schemas.Microsoft.com/developer/msbuild/2003">
</Project>
新しいプロファイルを作成すると、次のようなXMLが作成されます。
<Project ToolsVersion="4.0" xmlns="http://schemas.Microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
<LastUsedPlatform>Any CPU</LastUsedPlatform>
<TimeStampOfAssociatedLegacyPublishXmlFile />
<EncryptedPassword />
</PropertyGroup>
</Project>
<PropertyGroup>
ノードを取り、それを.pubxml.user
ファイルに入れると、PublishProfilesは再び機能し始めます。
簡単な解決策は、あなたの公開プロフィールを削除して、新しいプロフィールを作成することです。
ソリューションを右クリックして[公開]を選択すると、プロファイルセットができます。これを削除して新しいものを作成してください。
これで修正されます。
私は2010年から2012年に切り替えてからこの問題を抱えていた
同じエラーがあり、設定をrelease to debugから変更して問題を解決しました。
私はこれと同じ問題を抱えていましたが、このスレッドの答えはどれも私にとっては役に立ちませんでした。私の問題は、(私のアプリによって)動的に生成された静的HTMLファイルを含むディレクトリがあることでした。ディレクトリ全体が公開されていませんでした。
私のために働いた解決策が見つかりました こちら :
少し前に戻ってきて文書化すべきだと思った問題の1つは、プロジェクトを公開したときに特定の種類のファイルがアップロードされなかったことです。
問題のファイルの種類は、.pdfファイルと.rtfです。
これが発生した理由は、これらのファイル拡張子がVisual Studioによる発行を必要としていると認識されていなかったためです。幸い、これはVisual Studioで変更できます。
コピーされていないファイルを選択します。 プロパティで、ビルドアクションがコンテンツに設定されていることを確認します。
これでうまくいかない場合は、次のことを試してください。
プロジェクトメニューの下でパッケージ/発行Webを選択して、このドロップダウンを確認します。
これをこのプロジェクトフォルダ内のすべてのファイルに変更してみてください。
私はこれらの解決策をすべて試しましたが、これは毎回うまくいくものです。
"Publish method:"を "File System"から "Web Deploy"などに変更し、すぐに "File System"に戻します。
これは、.pubxml.userに公開に必要な情報が含まれており、そのファイルがソース管理に含まれていない(そして含まれるべきでない)ためです。このVSのバグを修正するには、.pubxml.userファイルから.pubxmlファイルに情報をコピーしてください。関連するプロパティは以下のとおりです。
<LastUsedBuildConfiguration>Release</LastUsedBuildConfiguration>
<LastUsedPlatform>Any CPU</LastUsedPlatform>
それらをあなたの.pubxmlに入れてください。
私はいくつかのプロジェクトで同じ問題を抱えています。ヒットしたのはWebプロジェクトだけのようです。プロファイルを削除して再作成すると、問題が一度だけ解決されます。さらに、生成されたpublishxmlを比較しても違いはないため、プロファイルとはまったく関係がないようです。
OPで述べられているビルドの問題を前後に変更するための回避策は、現時点で唯一の信頼できる解決策のようです。
以下は私のために働いた:
単にRelease> Debug> Releaseから(またはその逆に)変更してから公開します。
不要なものを削除、編集、公開する必要はありません。
私はVS 2010でも同じ問題に出くわしました。発行の出力、イベントログ、ビジュアルスタジオのログなどをチェックしてチェックした後、私は最近v1に更新されたと思うweb発行を削除することにしました。 0.30810.0。これで問題は解決しました。
ここでも同じ問題がありました。
"Publish method:"を "File System"から "Web Deploy"などに変更し、すぐに "File System"に戻します。
ディスク発行ターゲットを使用したVS 2012 Proと同じ問題。プロジェクトは以前は正しく公開されていましたが、ファイルをコピー先フォルダにコピーできなかったため、この問題を起こし始めました。
解決策は、発行プロファイルを編集し、モードをRelease(Any CPU)からdebugに変更してからRelease(Any CPU)に戻すことでした。これを行うと、PublishProfiles\projname.pubxml.userファイルが書き直されます(上記のとおり)。プロパティグループノードの下にLastUsedBuild、LastUsedPlatform、およびTimeStampOfAssociatedLegacyPublishXmlFile要素が追加されたように見えます。公開が完了すると、個々のファイルと公開時刻を持つ別のItemGroupが追加されます。
私がUmbraco CMSをインポートしたMVCプロジェクトのVS 2013でも最近同じ問題がありました。公開できませんでした。上記の答えは役に立ちましたが、VSで実際にすべきことを理解するのにしばらく時間がかかりました。それはいくつかの研究を必要としました。調べるためにMSブログで。私はそれを簡単に言うことを試みる:
この問題を回避するには、ターゲットの場所をobj/[release | stage | ..]からソリューションフォルダ以外の新しいパス(c:\ deploymentなど)に変更します。 VS 2012が混乱し、公開プロセスの途中であきらめていたようです。
マット
このアクションは私にとって成功しました:
[プロパティ]> [PublishProfiles]> [xxxx.pubxml]で[公開プロファイル]を終了して、もう一度設定し直します。
その価値があるので、私は結局私が望んだことを実行するためにWeb Deployと戦うことをあきらめた(デプロイ可能なファイルをコピーするなど何もしない)ので、私はそれをPowerShellでスクリプト化してその結果に本当に満足している。 MSBuild/Web Publishを使って試したものよりもはるかに高速です。おそらくこれらのメソッドがまだ必要ないことをしているからです。
要点は次のとおりです( 文字通り )。
function copy-deployable-web-files($proj_path, $deploy_dir) {
# copy files where Build Action = "Content"
$proj_dir = split-path -parent $proj_path
[xml]$xml = get-content $proj_path
$xml.Project.ItemGroup | % { $_.Content } | % { $_.Include } | ? { $_ } | % {
$from = "$proj_dir\$_"
$to = split-path -parent "$deploy_dir\$_"
if (!(test-path $to)) { md $to }
cp $from $to
}
# copy everything in bin
cp "$proj_dir\bin" $deploy_dir -recurse
}
私の場合、これをCI環境(TeamCity)で呼び出していますが、ビルド後のイベントにも容易にフックできます。
私は、ソリューション内の他のいくつかの参照プロジェクトを含むWebアプリケーションを持っています。私は過去に何度も単一のPublish設定で正常にデプロイしました。過去に見逃していたプロジェクトのプロジェクト構成をデバッグからリリースに変更しました。次にデプロイしようとしたときに、Publishが静かに失敗するという症状が出ました。何もしないで成功したと言います。
1>------ Build started: Project: Project, Configuration: DeployProduction Any CPU ------
1>
2>Publishing folder /...
========== Build: 1 succeeded, 0 failed, 9 up-to-date, 0 skipped ==========
========== Publish: 1 succeeded, 0 failed, 0 skipped ==========
それを回復する唯一の方法は、発行プロファイルを消去し、Visual Studioを閉じて強制的に削除を保存し、再度開いて、発行プロファイルを最初から再作成することでした。それができたら、私はまた元気にパブリッシュすることができました。
Win8 VS2012、安っぽいノートパソコン。
現在のプロジェクトをチェックして、同じクラス名と異なるページ名でバックコピーしたかどうかを確認します(クラス名はコピーされたファイルを継承します)。結局それはコンパイラを混乱させるでしょう!!!
CodeFile = "Consolidated.aspx.vb" Inherits = "Consolidated
私はこれをVisual Studioが生成したサービスリファレンスファイルが全体的なパス長の点から見て長すぎるようになることで遭遇しました。
Svcutil.exeを使用してサービス参照を再生成し、元のすべてのサービス参照ファイルを削除することでそれらを短縮しました。
svcutilはこのように呼び出すことができます。
"C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\SvcUtil.exe" /language:CS http://myservice /namespace:*,My.Namespace
My.Namespaceは、コンパイルエラーを回避するために、生成されたサービスプロキシ内の既存のネームスペース(通常はReference.csファイルにあります)に置き換える必要があります。
http://myservice
はサービスエンドポイントのURLに置き換えてください。
解決するためにこれらのステップに従って下さい:
Build > Publish > Profile > New
新しいプロファイルを作成し、既存のプロファイルと同じ設定でそれを設定します。
プロジェクトは正しく公開されます。これは多くの場合、新しいバージョンのVisual Studioで作成された別のコンピューターからのソース管理された発行プロファイルの結果として発生します。
私は同じ問題に遭遇しました。上記の解決策のどれも私のために働きませんでした。
そのため、公開中にコピーに失敗したファイルは除外しました。
私は何度もウェブサイトを公開しました。しかしある日私があるaspxファイルを修正してからウェブサイトを公開しようとしたとき、それは空の公開されたフォルダをもたらしました。
私の回避策で、私は解決策を見つけました。
発行ウィザードは発行中のエラーを反映しますが、ファイルをコピー先フォルダにコピーすることはありません。
エラーを生成するファイルを見つけるには、Webサイトのフォルダの内容を新しいフォルダにコピーして、そのWebサイトでVisual Studioを起動するだけです。
公開しようとすると、エラーを含むファイル名が表示されます。
元のWebサイトフォルダのエラーを修正して公開しようとするだけで、以前と同じように機能します。
上記の解決策のどれも私のために働きませんでした。
しかし、私たちのメインソリューションに含まれる5つのASP.NET MVCプロジェクトのうち4つは展開パッケージを適切な場所に配置し、1つはobj\Debugの下に配置しました。
プロジェクトを比較したところ、矛盾が見つかりました。 解決策はこれを変更することでした:
<Import
Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" />
これまで:
<Import
Project="$(VSToolsPath)\WebApplications\Microsoft.WebApplication.targets"
Condition="'$(VSToolsPath)' != ''" />
<Import
Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets"
Condition="false" />
この変更を加えた後、5つのプロジェクトすべてがそれぞれのデプロイメントパッケージを正しい場所に配置しました。
(長い行については申し訳ありませんが、それらをまとめるためのより良い方法を見つけることができませんでした。)
私はついに自分で答えを見つけました。上記の解決策すべてが私のために働かない。
私がしたことは、プロジェクトをドライブcに移動してプロジェクトフォルダをもっと短いものに変更して、それを公開することを好むことです。
それが私の側で失敗した理由は、私が非常に長いプロジェクト名/階層を持っていたということです。
C:¥Users¥user¥Desktop¥コンプライアンス管理システム¥ComplianceIssueManagementSystem¥ComplianceIssueManagementSystem
時々私はRARファイルを抽出したときにそれは名前/パスが長すぎることを言うので私はこれを考えていました。私はそれがビジュアルスタジオ2012年発行と同じになると思いました。そしてそれはします!
それが皆さんに役立つことを願っています。
Visual Studio 2012では、リリースを切り替えても問題が発生します。
obj
フォルダを削除するためのビルド前のイベントdel /s /f /q $(ProjectDir)\obj
を追加しました。これにより、公開の問題が修正されました。清掃は時々はたらきますが、いつもではありません。