web-dev-qa-db-ja.com

Visual Studio 2010 UltimateでCVT1100を解決するにはどうすればよいですか?

Qmakeを使用してVisualStudio2005プロジェクトファイルを生成する中規模のプロジェクトに取り組んでいます。 Visual Studio 2010Ultimateでビルドしようとしています。 qmakeはこれをサポートしていないのでIDEまだ、提供されている変換アシスタントにソリューションを変換してもらいました。

ビルドしようとすると、サブプロジェクトの1つで次のエラーが発生します。

CVTRES:致命的なエラーCVT1100:リソースが重複しています。タイプ:バージョン、名前:1、言語:0x0407

Googleの結果によると、このエラーは新しいバージョンのVisual Studioに移行するときに発生する可能性が高いようですが、理由はわかりません。そこで推奨されているハックは機能しません。

私がすでに試したことは、バージョン情報が出現するたびに異なる「名前」であっても、リソースの名前を乱数に変更することです。エラーを読み取り、対応する.RCファイルを削除した後、プロジェクトを再度ビルドすると、一度は機能します。しかし、それはあまりにも多くのハックです。

誰かアイデアはありますか?前もって感謝します。

21
user410436

VC++ 2010から2012に移行するときに、[構成のプロパティ]> [マニフェストツール]> [入力と出力]> [埋め込みマニフェスト]の設定を[〜#〜] no [〜#〜]に変更することで、この問題を解決しました。それが何なのかはわかりませんが、.manifestファイルの内容を調べたところ、埋め込まれていなくても生きていけるようです。

21
Jive Dadson

最近、Qt4.8.2とVisualStudio 2012で同様の問題を解決しました。Qt4.8.2はVS2012をmkspecとしてサポートしていないため、win32-msvc2010 mkspecをwin32-msvc2012にコピーし(_MSC_VERを1700に変更)、他のいくつかの回避策(QtWebKit修正など)を使用しました。 。—インターネットで見つけることができます)VS2012でQt4.8.2をビルドします。しかし、qmakeはVS2012 .vcxprojプロジェクトファイルを認識していなかったため、VS2010プロジェクトを生成し続けました。これらのプロジェクトファイルをVSで新しい2012形式に変換した後、上記のエラーが発生しました。

解決策は、生成された.resファイルをすべての構成(デバッグとリリースの両方)のビルドから除外することでした。これを行うには、ソリューションエクスプローラーで[生成されたファイル]フォルダーを開き、.resファイルを右クリックして、[プロパティ]を開き、ドロップダウンリストから[すべての構成]を選択して、[一般]セクションの[ビルドから除外]プロパティを[はい]に設定します。 。

これらのアクションを毎回手作業で繰り返すのは非常に面倒なので、これを自動化するPythonスクリプトを作成しました。これを使用して(自己責任で!)qmakeで生成された.vcxprojファイルを更新できます。

 import sys 
 import os 
 from xml.etree import ElementTree 
 
 def updateProject(filename):
 
 def getXmlns(tag):
 return tag [1:]。split( '}')[0] 
 
 tree = ElementTree.parse(filename)
 root = tree.getroot()
 xmlns = getXmlns(root.tag)
 for cb in root.iter( '{' + xmlns + '} CustomBuild'):
 if(not'Include 'in cb.attrib):
続行
 if(not cb.attrib [' Include ']。endswith('。res ')):
続行
 for excl in cb.iter( '{' + xmlns + '} ExcludedFromBuild'):
 if( 'Condition' in excl.attrib):
 del excl.attrib [ '条件'] #ExcludedFromBuild条件を削除
 ElementTree.register_namespace( ''、xmlns)
 tree.write(filename)
 
 if(len(sys.argv )> = 2):#指定されたプロジェクトファイルを使用するi nコマンドライン:
 for i in range(1、len(sys.argv)):
 updateProject(sys.argv [i])
 else:#すべてのプロジェクトファイルを更新現在のディレクトリ:
 os.listdir(os.getcwd())のファイル名:
 if(filename.endswith( '。vcxproj')):
 updateProject(filename) 

スクリプトをPython 2で動作させるには、作業ディレクトリをlistdir()に渡す必要があることを指摘してくれた Xandy に感謝します。

12
Dmitry Markin

コンパイル中にこのエラーが発生した場合(通常はインターネットからダウンロードしたプロジェクト)、マニフェストファイルを削除し、.rcファイル内のマニフェストファイルへの参照を削除します。

参照

6
hB0

私は最近この問題に遭遇しました、そして偶然にリソースの衝突がなかったプロジェクトファイルに行き着きました。私の場合、VS2008用にQTqmakeで生成されたプロジェクトをVS2010にインポートしていました。 VcprojFormatterと多くの差分を使用した後、私は違いを見つけました(私にとって)。インポートウィザードまたはVS2010のコアのバグだと思います。

http://www.codeproject.com/KB/macros/vcproj_formatter.aspx

私のリソースファイルはwin32_resources.rcと呼ばれていました。ビルド構成(リリース、デバッグなど)に対応する各中間データフォルダーを編集する必要があります。

Vcxprojファイルで次のようなセクションを探します。

<ItemGroup>
  <Resource Include="debug\win32_resources.res">
    <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
  </Resource>
  <Resource Include="release\win32_resources.res">
    <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
  </Resource>
</ItemGroup>

すべての「リソース」テキストは「CustomBuildStep」に置き換える必要があります。

<ItemGroup>
  <CustomBuildStep Include="debug\win32_resources.res">
    <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
  </CustomBuildStep>
  <CustomBuildStep Include="release\win32_resources.res">
    <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
  </CustomBuildStep>
</ItemGroup>

VS2008ファイルの問題は、default(?)設定が明示的ではなかったことです。

<File RelativePath="release\win32_resources.res">
  <FileConfiguration
    Name="Debug|Win32"
    ExcludedFromBuild="true"
    >
    <Tool Name="VCCustomBuildTool"/>
  </FileConfiguration>
</File>

「ツール名」フィールドがありませんでした。

4
user583741

コンパイル中にこのエラーが発生した場合(通常はインターネットからダウンロードしたプロジェクト)、マニフェストファイルを削除し、.rcファイル内のマニフェストファイルへの参照を削除します。

hB0によるこの回答は、私が遭遇したケースでは100%正しかったです。

これは私にとって非常に役に立ちました。他の人が投票し、hB0の投票がゼロであるため、hB0の回答を無視する必要があると想定するのではなく、他の人にこれを知ってもらうことで利益を得てもらいたいです。私はシステムが未登録のユーザーに投票させないので、別の答えでそれを言わなければなりません。私もこの回答に投票できるように登録しましたが、システムは私がより成熟したユーザーになるまで投票を許可しません。

3
Reg Edit

これは一筋縄ではいきませんが、Visual Studio 2005でも同様の問題が発生しました。役立つか、完全にベースから外れている可能性があります。

独自のバージョンリソースを持つ静的ライブラリ(.lib)とリンクしていました。非常に合理的で、ライブラリのバージョンが表示されます。一部のステーションでは、私のアプリがリンクします。他のステーションでは、あなたが受け取ったのと同じ重複したリソースメッセージが表示されます。

リンカーの最適化設定に関連していることが判明しました:「ライブラリの依存関係の入力を使用する」(UseLibraryDependencyInputs =)、おそらく「ライブラリの依存関係のリンク」と組み合わせる。 「ライブラリ依存関係入力の使用」が有効になっている場合、リンカーには、.libを検索するだけでなく、.libの構築に使用される.objファイルと.resファイルが提供されていました。

問題は、リンカーへの入力ファイルとして.libの.resファイルを不要にすることです。私のプロジェクトには独自のバージョンリソースがあります。 .libのリソースを取り込むと、2つのバージョンのリソースがあるため、エラーが発生します。リンカが単に.libを検索する場合、.libのリソースを取り込む理由はなく、すべて問題ありません。

私のプロジェクトの構成は、「ライブラリの依存関係の入力を使用する」の設定を強制せず、それを継承しました。一部のステーションでは、「いいえ」を継承し、リンクできました。一部のステーションでは、「はい」を継承し、エラーが発生しました。

Visual Studio 2010にまだこの設定がある場合は、強制的にオフにしてみてください。

2
Dan K

私はこの問題を抱えていましたが、メインの.rcが残りを含む#rcを除いて、含まれている.rcファイルがビルドから除外されていることを確認することで解決しました。

私はこの問題を抱えていましたが、メインの.rcが残りを含む#rcを除いて、含まれている.rcファイルがビルドから除外されていることを確認することで解決しました。リチャードハインによって私のために働いた。私はVS2013でコンパイルしていました。

1
Vrijendra

Visual Studio C++ 2010でも同様の問題が発生しました。サービスパックやVSの更新プログラムをインストールしていません。この問題は、ICONを使用しようとした2つのrcファイルがある場合に発生します。そのため、1つのファイルの内容を取得して、メインファイルにカットしました。したがって、1つのファイルのみにICONSが含まれ、2番目のファイルは空です。シャームのように機能します:-)。

1
John Boe

Dmitry Markin回答のelseブロックを置き換えて、すべてのプロジェクトファイルを再帰的に更新します

else: # recursively update all project files in current directory:
    rootdir = os.getcwd()
    for root, subFolders, files in os.walk(rootdir):        
        for filename in files:
            if(filename.endswith('.vcxproj')):
                filePath = os.path.join(root, filename)
                print "file: %s" % (filePath)
                updateProject(filePath)
0
Chang

私はこれを持っていて、resource.hで次のことをしました

#undef VS_VERSION_INFO
#define VS_VERSION_INFO                 310

VS_VERSION_INFOにはWinRes.hでリソースID1が指定されているため、別の方法で問題を修正しました。

0
S Buckler

私はこのエラーの答えを探してここに来ました。バブルを破ってすみません。答えはどれも私にはうまくいきませんでした。私の間違いは、同じIDで3つのマクロを定義したことでした。それが私が質問で言及されたエラーを受け取った理由です。

エラーが表示されていた前の私のコード:

#define IDB_MARKER_NORMAL_LINE          21**6**   
#define IDB_MARKER_ARROW_LINE           21**6**   
#define IDB_MARKER_DOTTED_LINE          21**6**  

私はそれを次のように変更しました:

#define IDB_MARKER_NORMAL_LINE          21**6**   
#define IDB_MARKER_ARROW_LINE           21**7**   
#define IDB_MARKER_DOTTED_LINE          21**8**  

エラーはなくなりました!!!!!!!!!!

0
Govind

コンパイル中にこのエラーが発生した場合(通常はインターネットからダウンロードしたプロジェクト)、マニフェストファイルを削除し、.rcファイル内のマニフェストファイルへの参照を削除します。

HB0によるこの回答は、私が遭遇したケースに対して100%正しかった。

これは私にとって非常に役に立ちました。他の人には投票があり、hB0には投票がないため、hB0の回答を無視する必要があると想定するのではなく、他の人にこれを知ってもらうことで利益を得てもらいたいと思います。私はシステムが未登録のユーザーに投票させないので、別の答えでそれを言わなければなりません。私もこの回答に投票できるように登録しましたが、システムは私がより成熟したユーザーになるまで投票を許可しません。

この答えは、私が遭遇した問題を見つける方法を示しています。私のシナリオでは、インポート小道具には次のコードがあります。

<ResourceCompile Include="$(VersioningDir)**Version.rc" />

削除すると、すべての作業が完了します。

0
xuanyuanlei