Су, s>
Поискал это:
Ссылки моих предыдущих ответов по какой-то причине больше не работают, поэтому вот еще один ответ от TechNet :
DECLARE @Sourcedb sysname
DECLARE @Destdb sysname
DECLARE @Tablename sysname
DECLARE @SQL varchar(max)
SELECT @Sourcedb = '<>'
SELECT @Destdb = '<>'
SELECT @Tablename = '<>' -- '%' for all tables
SELECT @SQL = ' SELECT Tablename = ISNULL(Source.tablename,Destination.tablename)
,ColumnName = ISNULL(Source.Columnname,Destination.Columnname)
,Source.Datatype
,Source.Length
,Source.precision
,Destination.Datatype
,Destination.Length
,Destination.precision
,[Column] =
Case
When Source.Columnname IS NULL then ''Column Missing in the Source''
When Destination.Columnname IS NULL then ''Column Missing in the Destination''
ELSE ''''
end
,DataType = CASE WHEN Source.Columnname IS NOT NULL
AND Destination.Columnname IS NOT NULL
AND Source.Datatype <> Destination.Datatype THEN ''Data Type mismatch''
END
,Length = CASE WHEN Source.Columnname IS NOT NULL
AND Destination.Columnname IS NOT NULL
AND Source.Length <> Destination.Length THEN ''Length mismatch''
END
,Precision = CASE WHEN Source.Columnname IS NOT NULL
AND Destination.Columnname IS NOT NULL
AND Source.precision <> Destination.precision THEN ''precision mismatch''
END
,Collation = CASE WHEN Source.Columnname IS NOT NULL
AND Destination.Columnname IS NOT NULL
AND ISNULL(Source.collation_name,'''') <> ISNULL(Destination.collation_name,'''') THEN ''Collation mismatch''
END
FROM
(
SELECT Tablename = so.name
, Columnname = sc.name
, DataType = St.name
, Length = Sc.max_length
, precision = Sc.precision
, collation_name = Sc.collation_name
FROM ' + @Sourcedb + '.SYS.objects So
JOIN ' + @Sourcedb + '.SYS.columns Sc
ON So.object_id = Sc.object_id
JOIN ' + @Sourcedb + '.SYS.types St
ON Sc.system_type_id = St.system_type_id
AND Sc.user_type_id = St.user_type_id
WHERE SO.TYPE =''U''
AND SO.Name like ''' + @Tablename + '''
) Source
FULL OUTER JOIN
(
SELECT Tablename = so.name
, Columnname = sc.name
, DataType = St.name
, Length = Sc.max_length
, precision = Sc.precision
, collation_name = Sc.collation_name
FROM ' + @Destdb + '.SYS.objects So
JOIN ' + @Destdb + '.SYS.columns Sc
ON So.object_id = Sc.object_id
JOIN ' + @Destdb + '.SYS.types St
ON Sc.system_type_id = St.system_type_id
AND Sc.user_type_id = St.user_type_id
WHERE SO.TYPE =''U''
AND SO.Name like ''' + @Tablename + '''
) Destination
ON source.tablename = Destination.Tablename
AND source.Columnname = Destination.Columnname '
EXEC (@Sql)
За последние месяцы я узнал намного больше о фреймворках, поэтому переписываю этот ответ. Обратите внимание, что я говорю об установке фреймворка как части рабочего процесса разработки .
Предпочтительное место для установки общедоступного фреймворка (т. Е. Фреймворка, который будет использоваться более чем одним из ваших приложений или bundles) - это / Library / Frameworks [текст ссылки], потому что «фреймворки в этом месте автоматически обнаруживаются компилятором во время компиляции и динамическим компоновщиком во время выполнения». [Руководство по программированию фреймворков]. Самый элегантный способ сделать это - в разделе «Развертывание» в настройках сборки.
Когда вы работаете над фреймворком, бывают моменты, когда вы действительно хотите обновить фреймворк при выполнении сборки, и периоды, когда вы этого не делаете. т. По этой причине, Я меняю настройки развертывания только в Release Configuration. Итак:
Deployment Location = YES (установите флажок)
Installation Build Products Location = /
Installation Directory = / Library / Frameworks
Установка Продукты для сборки Местоположение служит корнем установки. Его значение по умолчанию - это некоторый каталог / tmp: если вы не измените его на системный корень, вы никогда не увидите установленный фреймворк, поскольку он скрывается в каталоге / tmp. После перехода на Xcode 4 у меня возник ряд проблем с моей пользовательской структурой. В основном они связывают предупреждения в GDB, которые на самом деле не влияют на полезность фреймворка, за исключением запуска встроенного модульного теста. Я отправил в Apple заявку в службу технической поддержки неделю назад, и они все еще изучают ее. Когда я получу рабочее решение, я обновлю этот ответ, так как вопрос оказался довольно популярным (1 kViews и подсчет).
There's not much reason to put a framework into Library/Frameworks, and it's a lot of work: You'd need to either do it for the user in an Installer package, which is a tremendous hassle to create and maintain, or have installation code in your app (which could only install to ~/L/F, unless you expend the time and effort necessary to make your app capable of installing to /L/F with root powers).
Much more common is what Apple calls a “private framework”. You'll bundle this into your application bundle.
Even frameworks intended for general use by any applications (e.g., Sparkle, Growl) are, in practice, built to be used as private frameworks, simply because the “right” way of installing a single copy of the framework to Library/Frameworks is such a hassle.
Обычный способ сделать это - сделать так, чтобы ваш проект фреймворка и его клиенты использовали общий каталог сборки. Xcode будет искать заголовки фреймворка и связываться с двоичными файлами фреймворка в папке сборки сначала , а затем в любом другом месте. Таким образом, проект приложения, который компилируется и связывается с заголовком, выбирает последний созданный, а не то, что было установлено.
Затем вы можете удалить cp -r и вместо этого использовать параметр сборки Install Location для размещения вашей сборки product в конечном расположении, используя xcodebuild install DSTROOT = / в командной строке. Но вам нужно будет делать это только тогда, когда вы закончите, а не каждый раз, когда вы перестраиваете фреймворк.
Естественно, когда вы распространяете свой фреймворк, он должен быть установлен в / Library / Frameworks; однако мне кажется странным, что вы делаете это с тестовыми / отладочными версиями вашего фреймворка.
Моим первым побуждением было бы установить тестовые версии в ~ / Library, так как это значительно упрощает настройку среды тестирования и отладки. Если возможно, я бы ожидал, что среда отладки / тестирования будет расположена в дереве сборки версии, которую я тестирую, и в этом случае она устанавливается как Private Framework для целей тестирования. Это значительно упростит вашу жизнь, когда придет время иметь дело с несколькими версиями вашего фреймворка.
В конечном счете, не имеет значения, где находится фреймворк, пока ваше приложение или набор тестов загружает правильную версию.